添加对GAC程序集的引用递归复制非GAC相关程序集(c#Visual Studio 2008)

时间:2010-11-16 17:10:05

标签: c# visual-studio reference gac

这是我的申请表: c:\ Program Files \ Product \ API.dll(在Gac中注册)
c:\ Program Files \ Product \ ApiImpl1.dll(Non Gac)
c:\ Program Files \ Product \ ApiImpl2.dll(Non Gac)
c:\ ConsoleApplication \ TestApi.exe

Api.dll是Facade for Application,它实现了“c:\ Program Files \ Product \” Api.Dll在GAC中注册,并具有DLL的程序集解析器,位于“c:\ Program Files \ Product”中 Api.dll引用ApiImpl1.dll和ApiImpl2.dll。

问题是在ConsoleApplication中我添加对Api.dll的引用Visual Studio会将ApiImpl1.dll和ApiImpl2.dll重复复制到项目目的地。 (虽然CopyLocal = False) 我通过浏览将引用添加到“c:\ Program Files \ Product \ API.dll”

据我所知,我有几个解决方案:
1)在GAC中注册ApiImpl1.dll和ApiImpl2.dll(不可接受,我有此装配解析器)
2)添加到“.Net Add Reference”注册表,“c:\ Program Files \ Product”(不解决)
3)添加到“.Net添加引用”注册表,“c:\ windows \ Assembly \ gac_msil \ Api.dll(解决它,但这是一个糟糕的解决方案)
4)手动更改Api.dll Reference的ConsoleApplication.csproj和Remove HintPath属性。 (不可接受,因为我会有很多客户使用这个API)

1 个答案:

答案 0 :(得分:0)

您应该始终在GAC中使用与GAC相关的dll ...如果需要在那里,其他人也一样。

问题是虽然Visual Studio知道在哪里通过引用找到这些dll文件,但是如果dll文件不在项目目录中(因此副本),运行时的应用程序将不知道在哪里查看。


修改
如果你有Assembly Resolver,是否有必要将API.dll放入GAC?也许如果该DLL不在GAC中,Visual Studio将不会复制其他文件。我很确定这是因为根DLL在GAC中,但依赖的DLL不是。