添加对GAC程序集的引用以递归方式复制非GAC依赖的程序集(c#Visual Studio 2008)
这是我的申请部门: c:\Program Files\Product\API.dll(在Gac中注册)添加对GAC程序集的引用以递归方式复制非GAC依赖的程序集(c#Visual Studio 2008),c#,visual-studio,reference,gac,C#,Visual Studio,Reference,Gac,这是我的申请部门: c:\Program Files\Product\API.dll(在Gac中注册) c:\Program Files\Product\apimpl1.dll(非Gac) c:\Program Files\Product\apimpl2.dll(非Gac) c:\ConsoleApplication\TestApi.exe Api.dll是实现“c:\Program Files\Product”的应用程序的外观 Api.Dll在GAC中注册,并具有指向Dll的程序集解析器,该解
c:\Program Files\Product\apimpl1.dll(非Gac)
c:\Program Files\Product\apimpl2.dll(非Gac)
c:\ConsoleApplication\TestApi.exe Api.dll是实现“c:\Program Files\Product”的应用程序的外观 Api.Dll在GAC中注册,并具有指向Dll的程序集解析器,该解析器位于“c:\Program Files\Product”中 Api.dll同时引用APIMPL1.dll和APIMPL2.dll 问题在于,当在ConsoleApplication中添加对Api.dll的引用时,Visual Studio会将APIMPL1.dll和APIMPL2.dll重复复制到项目目标。(尽管CopyLocal=False) 我通过浏览“c:\Program Files\Product\API.dll”添加引用 据我所知,我有几种解决方案:
1) 在GAC中注册APIMPL1.dll和APIMPL2.dll(不可接受,我有用于此的程序集解析器)
2) 添加到“.Net添加引用”注册表,“c:\Program Files\Product”(不解决此问题)
3) 添加到“.Net添加引用”注册表,c:\windows\Assembly\gac\msil\Api.dll(解决它,但这是一个糟糕的解决方案)
4) 手动更改ConsoleApplication.csproj并删除Api.dll引用的HintPath属性。(不可接受,因为我会有很多客户使用此Api)您应该始终在GAC中包含依赖于GAC的dll…如果需要,其他人也可以 问题在于,尽管VisualStudio通过引用知道在何处查找这些dll文件,但如果dll文件不在项目目录中(因此是副本),则运行时的应用程序将不知道在何处查找
编辑
如果您有程序集解析程序,是否有必要将API.dll放入GAC中?如果该dll不在GAC中,Visual Studio可能不会复制其他文件。我非常确定的是,根dll位于GAC中,而依赖dll则不在GAC中。CopyLocal=False“-这是在API.dll还是在APIMPL1.dll上?我知道这是一种不好的做法。但是在运行时,我有一个解析器,它可以查找不在GAC中的DLL。问题是VisualStudio不知道我知道有办法让它工作。。。但是,正如你所看到的,它会引起问题。另外,我不知道您使用汇编解析器拥有哪种细粒度控制,但是GAC将自动控制版本控制,并且安装到GAC提供了一种受控的部署方法。要依赖程序集解析器,您必须将AR与应用程序一起部署(尽管您可能只需要部署到一台服务器?)