gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:43:37 26 4
gpt4 key购买 nike

这是我的应用部署:c:\Program Files\Product\API.dll(在Gac中注册)
c:\Program Files\Product\ApiImpl1.dll (非 Gac)
c:\Program Files\Product\ApiImpl2.dll (非 Gac)
c:\ConsoleApplication\TestApi.exe

Api.dll 是应用程序的门面,实现了“c:\Program Files\Product\”Api.Dll 已在 GAC 中注册,并且具有位于“c:\Program Files\Product\”中的 DLL 的程序集解析器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(不能接受,我有这个的Assembly Resolver)
2)添加到“.Net Add Reference”注册表,“c:\Program Files\Product”(未解决)
3)添加到“.Net Add Reference”注册表,“c:\windows\Assembly\gac_msil\Api.dll(解决了,不过是个不好的解决方案)
4) 手动更改 ConsoleApplication.csproj 和删除 Api.dll 引用的 HintPath 属性。 ( Not Acceptable ,因为我会有很多客户会使用这个 API)

最佳答案

您应该始终在 GAC 中拥有依赖于 GAC 的 dll...如果一个需要在那里,其他的也需要。

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


编辑
如果你有Assembly Resolver,是否有必要将API.dll放入GAC?也许如果那个 dll 不在 GAC 中,Visual Studio 就不会复制其他文件。我很确定根 DLL 在 GAC 中,但从属 DLL 不在。

关于c# - 添加对 GAC 程序集的引用以递归方式复制非 GAC 依赖程序集(c# Visual Studio 2008),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4196872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com