2011-07-18 230 views
0

開發.NET程序的最佳實踐似乎是這樣的:從不在開發過程中引用GAC的dll。部署的.NET程序如何在GAC中引用程序集?

但是,我應該如何獲得實際部署的產品以引用GAC中的dll?例如,如果我的產品是一個非常簡單的Windows應用程序,那麼我應該如何編程我的代碼,以便單個部署的.exe文件從GAC引用System.Windows.Forms.dll

我是.NET開發新手,所以我可能會缺少一些非常基礎的東西。

+0

「開發.NET程序的最佳實踐似乎是這樣的:在開發過程中不要從GAC引用dll。」 [引文需要]我不喜歡將自己的程序集添加到GAC,但是我從來沒有聽到任何針對從GAC引用系統程序集的任何內容。 – CodesInChaos

回答

1

您可以在Add References對話框中添加列表中的參考。這增加了條目到你的.csproj看起來像以下:

<ItemGroup> 
    <Reference Include="System" /> 
    <Reference Include="System.Core" /> 
    <Reference Include="System.Xml.Linq" /> 
    <Reference Include="System.Data.DataSetExtensions" /> 
    <Reference Include="Microsoft.CSharp" /> 
    <Reference Include="System.Data" /> 
    <Reference Include="System.Xml" /> 
</ItemGroup> 

你不發貨這些DLL與您的項目。您可以發佈.net框架的redist安裝程序,但如果您提供程序的物理副本,而不是如果您提供下載,這只是一個好主意。將它們包含在您的程序中可能是版權侵犯。當然,在Mono中,未來的windows/.net版本等需要使用不同的System.Windows.Forms程序集,如果您分發了自己的此文件副本,那麼這將不起作用。

這些程序集將從GAC加載。但這很好,因爲畢竟它們是.net框架的一部分。編譯的引用看起來類似於mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089。這樣框架將選擇正確的版本,並確保引用程序集來自正確的創建者。

不使用GAC的指導原則指您自己或第三方的程序集。您將這些應用程序發佈到您的應用程序中,並將它們放在與主程序相同的目錄中。將它們添加到GAC僅在少數特定情況下需要。

0

簡單的答案不是從GAC引用System.Windows.Forms.dll。相反,將該DLL包含在應用程序中。

UPDATE

如果你想引用添加到的dll在GAC你可以這樣做,使用常規的添加引用對話框。

瀏覽到C:\Windows\assembly是您可以選擇這些參考的地方。

+0

爲什麼?該文件必然位於系統中。 –

+0

這是如何回答這個問題的?我想知道程序如何在GAC中引用dll,並且您似乎在說「假裝GAC不在,並且從不使用它」。我錯過了什麼? –

+0

我已經更新了一些關於如何在GAC中實際引用dll的更多信息。我不是故意暗示你不應該在GAC中引用項目,我想我只是稍微誤解了你的問題。 –