2012-09-12 20 views
6

Necesito instalar un ensamblaje en GAC usando C#. A continuación es mi código:Instalar un ensamblaje en GAC mediante programación

new System.EnterpriseServices.Internal.Publish().GacInstall("MyAssembly.dll"); 

El código anterior muestra el error:

Absolute path required

pero necesito esto para ejecutar sin necesidad de utilizar la ruta del archivo estático (ruta absoluta). ¿Alguien puede decirme si es posible? He agregado la referencia al ensamblaje dentro de las referencias del proyecto. Necesito instalar este ensamblaje dentro de GAC.

+0

¿Se puede usar 'gacutil.exe' y' Process.Start() '? – abatishchev

+0

Necesito hacerlo programáticamente en el proyecto C# – sharmila

+1

Um. ¿Resolver la ruta del archivo a una ruta absoluta en tiempo de ejecución antes de intentar la instalación? –

Respuesta

11

Se podría hacer algo como:

GacInstall((new System.IO.FileInfo("MyAssembly.dll")).FullName); 

o,

GacInstall(System.IO.Path.GetFullPath("MyAssembly.dll")); 

Suponiendo que el archivo está en el directorio de trabajo actual. Si no es así, entonces es necesario definir qué reglas se utilizan para encontrar esta DLL (por ejemplo, es en el mismo camino que su ejecutable actual?)

0

El propio error indica que debe indicar la ruta completa de ubicación de la DLL que reside. es decir, C: \ MyProjects \ MyAssembly.dll en el camino

1

Si conoces relativa camino de que DLL respecto de su executeble, hacer

string executableDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
string assemblyFullPath = Path.Combine(executableDirectory, 
          relativePathToAssembly); 

en caso de trabajo por usted.

+0

Eso no funcionará si el proceso ha cambiado el directorio actual después del inicio, o si el proceso se inició con una corriente diferente directorio que la carpeta del ensamblaje en ejecución. La forma correcta sería usar 'Environment.CurrentDirectory'. –

+0

@atornblad: también puede _set_ Environment.CurrentDirectory, cambiando su ruta durante la ejecución y más, es información del sistema operativo, que de ninguna manera reflejará la configuración de su aplicación. – Tigran

+0

La pregunta no menciona nada sobre el solo deseo de registrar dlls que están en el mismo directorio que la aplicación de ejecución. –

2

tratar esto más adelante pieza que cameup con, que me haga saber si esto funciona

Assembly assembly = Assembly.GetAssembly(typeof(Program));//Replace your Type here. 
string filePath = assembly.Location; 

después utilizar esta ruta de archivo.

+0

Eso solo funcionaría si se hace referencia al conjunto desde el programa que realiza la instalación de GAC. –

-3

Sencillos pasos para añadir un ".dll" archivo en la caché de ensamblados global en C#:

  1. En su proyecto, 'Agregar referencia' para el archivo .dll que desea instalar en la GAC ​​
  2. formar las referencias, haga clic en el archivo .dll en particular y seleccionar "Propiedades"
  3. Cambiar la propiedad "Copia local" en "True"
  4. construir e implementar el uso de WSPBuilder
  5. para la verificación, sólo echa en el manifestar t archivo si la ruta existe o no y también en "C: \ Windows \ assembly".
+0

Reviviendo esto, perdón por eso. Pero esta no es exactamente una forma programática de hacerlo. –

Cuestiones relacionadas