Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加对GAC程序集的引用以递归方式复制非GAC依赖的程序集(c#Visual Studio 2008)_C#_Visual Studio_Reference_Gac - Fatal编程技术网

添加对GAC程序集的引用以递归方式复制非GAC依赖的程序集(c#Visual Studio 2008)

添加对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\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”中 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与应用程序一起部署(尽管您可能只需要部署到一台服务器?)