部署的.NET程序如何在GAC中引用程序集?

时间:2011-07-18 12:08:02

标签: .net gac .net-assembly

开发.NET程序的最佳实践似乎是:在开发过程中永远不要参考GAC的dll。

但是,我应该如何让实际部署的产品引用GAC中的dll?例如,如果我的产品是一个非常简单的Windows应用程序,那么我该如何编写代码以便单个部署的.exe文件从GAC引用System.Windows.Forms.dll

我是.NET开发的新手,所以我可能会遗漏一些非常基础的东西。

2 个答案:

答案 0 :(得分: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即可。

答案 1 :(得分:0)

简单的答案是不要从GAC引用System.Windows.Forms.dll。请在您的应用程序中包含该DLL。

<强>更新

如果您希望在GAC中添加对dll的引用,可以使用常用的“添加引用”对话框来执行此操作。

浏览C:\Windows\assembly是您可以选择这些参考的地方。