2012-09-12 37 views
6

我需要使用c#在GAC中安裝程序集。下面是我的代碼:以編程方式將程序集安裝到GAC中

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

上面的代碼提供了錯誤:

Absolute path required

但我需要這種不使用靜態文件的路徑(絕對路徑)運行。誰能告訴我它是否可能?我在項目引用中添加了對程序集的引用。我需要在GAC中安裝此程序集。

+0

你可以使用'gacutil.exe'和'Process.Start()'嗎? – abatishchev

+0

我需要以編程方式在c#項目中執行 – sharmila

+1

嗯。在嘗試安裝之前,在運行時將文件路徑解析爲絕對路徑? –

回答

11

你可以這樣做:

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

,或者

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

假設該文件是在當前工作目錄。如果不是,那麼你需要定義正在使用哪些規則來找到這個DLL(例如,是它作爲當前的可執行文件相同的路徑?)

0

錯誤本身狀態,你需要給位於DLL的完整位置路徑。即C:\ MyProjects下\ MyAssembly.dll程序路徑

1

如果你知道DLL相對路徑的關於你的executeble,讓你

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

應該工作。

+0

如果進程在啓動後更改了當前目錄,或者進程使用不同的當前目錄比正在執行的程序集的文件夾。正確的方法是使用'Environment.CurrentDirectory'。 –

+0

@atornblad:您也可以設置Environment.CurrentDirectory,通過在執行期間更改它的路徑以及更多操作系統信息,這些信息不會以任何方式反映您的應用程序設置。 – Tigran

+0

這個問題沒有提到任何關於只想註冊與執行應用程序在同一目錄中的dll的任何信息。 –

2

試試這個下面的一塊,我用cameup,讓我知道,如果這個工程

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

然後用這個文件的路徑。

+0

只有在執行GAC安裝的程序引用程序集時纔可以使用。 –

-3

簡單的步驟添加一個「.dll文件」文件到全局程序集緩存在C#:

  1. 在你的項目中,‘添加引用’你想在GAC
  2. 安裝.dll文件
  3. 形式引用,右鍵點擊特定的.dll文件,並選擇「屬性」
  4. 更改屬性「複製本地」到「真」
  5. 建立和使用wspBuilder
  6. 爲了驗證部署,只是檢查在manifes t文件中是否存在路徑,也可以在「C:\ Windows \ assembly」中找到。
+0

振興這一點,對此感到遺憾。但這不完全是一種編程方式。 –