首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以引用指定多个强名称的.NET dll

是否可以引用指定多个强名称的.NET dll
EN

Stack Overflow用户
提问于 2016-10-21 22:51:19
回答 1查看 201关注 0票数 0

我可以以某种方式指定我添加的引用具有强名称X或强名称Y吗?

我的.DLL引用Microsoft.Exchange.WebServices.dll。不幸的是,它的nuget版本太旧了,并且没有修复一些错误。所以我从Github下载了它(它在那里比较新)并构建了它。所以我现在引用我自己的Microsoft.Exchange.WebServices.dll版本。这是可行的,但我的.DLL的一些用户可能需要使用原始的Microsoft.Exchange.WebServices.dll (例如,如果他们只能通过nuget安装库),尽管nuget的版本没有有用的错误修复。

我希望它是这样的,这样我的库就可以引用Microsoft.Exchange.WebServices.dll中的任何一个,这取决于将出现的是哪一个。所以引用必须允许来自微软的强名称(来自nuget)和来自我的强名称。我能为给定的.dll指定允许的强名称列表吗?

EN

回答 1

Stack Overflow用户

发布于 2016-10-22 02:50:15

我可以以某种方式指定我添加的引用具有强名称X或强名称Y吗?

No,由于您还没有很好地理解这个概念,请理解强名称密钥而不仅仅是一个命名法,这是一种基于公钥-私钥组合的加密形式,其中使用用户提供的私钥公钥对二进制文件进行签名,以确保防篡改。你不能这样做,因为对于Microsoft.Exchange.WebServices.dll,你需要微软的证书用于加密,本质上是访问他们的私钥,这是不可能的。

你的主要问题是,虽然你可以从Github编译Microsoft.Exchange.WebServices.dll的代码,但你的客户可能仍然会得到一个

版本,它们不能在一起工作。特别是因为它是相同的版本,一个签名,另一个未签名

您的选择是将Microsoft.Exchange.WebServices.dll重命名为自定义名称,并在编译二进制文件时使用自定义名称空间,然后尽管您的代码将使用微软的代码作为自定义二进制文件,但客户仍然可以获得Nuget版本,即使他们直接使用API或从GAC加载API,也不会发生任何冲突。

回答OP评论的

Comment1 :

如果您公开了MS库中的类型,这意味着您将创建一个包装器,那么无论如何,使用您的库和Nuget库的客户将很难处理类似的API,除非它们被捆绑在您唯一的命名空间下以进行清晰的划分。事实上,请注意,即使使用签名,这也不会起作用,因为在给定的时间点,只有一个具有给定名称和版本的程序集可以加载到应用程序域中,签名负责防篡改。如果您也更改了版本,则可以工作,但在运行时可能会导致非常奇怪和意想不到的问题

Comment2 :

感谢您的进一步澄清,您只需使用您的公钥-私钥组合对MS库进行签名:

由于相同的名称和版本问题,上面提到的

  • 仍然不会加载,
  • 选项将重命名或至少更改

的版本

您尝试执行的操作将进行编译,但在运行时可能会导致意外的二进制解析问题。因为你有来自Github的代码,所以最好是有一个自定义名称的镜像,这样就有了100%的预期行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40179728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档