2015-08-21 39 views
1

我有一個簡單的c#應用程序,我想從C:\..\..myassembly.dll引用程序集而不將其複製到bin文件夾。從路徑加載程序集而不將其複製到bin文件夾

我有一種方法來改變如何被引用/加載程序集?

編輯:大會是不是在GAC

+0

你可以單獨使用'Assembly'類'LoadFrom'重載加載程序集。 –

+0

單擊解決方案中的參考並將'Copy Local'設置爲false – Rob

+0

如果我將本地複製設置爲false,則我的應用程序將不會啓動:) –

回答

1

其實它在運行時可以通過在你的配置中使用<codeBase>標籤:

<configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="MyAssembly2" culture="neutral" publicKeyToken="307041694a995978"/> 
     <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 
</configuration> 

您可以參考MSDN獲得更具體的信息。此解決方案的缺點是您必須手動指定程序集版本。

+0

您能否給我提供一個示例 –

+0

@devhedgehog其實我已經提供了一個示例。我可以詳細說明,但請具體說明您不清楚的內容。 – Kamo

+0

我做了與上面顯示的一樣,除了我有多個dependentAssembly條目。恰好4個。兩個正在工作,但那些publicKeyToken = null的不是。有任何想法嗎? –

0

解決您的問題的多種解決方案。

要避免通過選擇.dll屬性將庫複製到輸出文件夾集Copy Local爲false。

選項1:

包括下列在配置文件部分,讓運行時允許從您指定的位置加載。

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="MyAssembly" publicKeyToken="2d65620afb84f19d" /> 
     <codeBase version="1.0.0.0" href="C:\..\..myassembly.dll" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

選項2:

衆所周知選項,使用反射來加載程序集。

Assembly.Load(@"C:\..\..myassembly.dll") 

希望這有助於!

相關問題