这是我的申请表:
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)
答案 0 :(得分:0)
您应该始终在GAC中使用与GAC相关的dll ...如果需要在那里,其他人也一样。
问题是虽然Visual Studio知道在哪里通过引用找到这些dll文件,但是如果dll文件不在项目目录中(因此副本),运行时的应用程序将不知道在哪里查看。
的修改
如果你有Assembly Resolver,是否有必要将API.dll放入GAC?也许如果该DLL不在GAC中,Visual Studio将不会复制其他文件。我很确定这是因为根DLL在GAC中,但依赖的DLL不是。