Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
C# 4.0 组合C++/CLI、x86、x64和强命名_C# 4.0_C++ Cli - Fatal编程技术网

C# 4.0 组合C++/CLI、x86、x64和强命名

C# 4.0 组合C++/CLI、x86、x64和强命名,c#-4.0,c++-cli,C# 4.0,C++ Cli,让我直截了当地说: 主要应用程序: C#(4.0),任意CPU 库: 用C++/CLI编写的native.dll的包装器。汇编成两个版本;x86和x64,都使用相同的.snk密钥签名(使用变通方法) 限制: 最终,x86和x64平台需要一个分发包。 由于对其他强名称库的引用,主应用程序需要强名称。 使用托管C#和P/Invoke重写库绝对是最后的出路 问题: 只要主应用程序在编译时引用运行时所需的库的版本(x86或x64),这一切都可以正常工作 移动相同的编译输出——并在安装过程中用正确的平台版

让我直截了当地说:

主要应用程序:

C#(4.0),任意CPU

库:

用C++/CLI编写的native.dll的包装器。汇编成两个版本;x86和x64,都使用相同的.snk密钥签名(使用变通方法)

限制:

最终,x86和x64平台需要一个分发包。 由于对其他强名称库的引用,主应用程序需要强名称。 使用托管C#和P/Invoke重写库绝对是最后的出路

问题:

只要主应用程序在编译时引用运行时所需的库的版本(x86或x64),这一切都可以正常工作

移动相同的编译输出——并在安装过程中用正确的平台版本交换库——不起作用,因为库的签名与引用的签名不同

在没有任何强命名的测试应用程序中,我可以根据需要在它们之间切换

问题:

是否有办法在设置的限制范围内启用x86和x64库之间的切换,或者强命名是否阻止了除重写库之外的任何可能的解决方案


让我澄清一下,这不是一个关于找到正确的.dll(如所讨论的)的问题,而是关于一旦找到就能够加载.dll的问题。

@Damien\u不信者的评论让我思考,他是对的,强名称是相同的,这不是实际问题

我发现图书馆的两个版本之间的另一个区别;输出名称设置为
nnn.dll
nnnx64.dll
。更改它,使两者具有相同的输出名称,神奇地使其全部工作


也许有人知道为什么这样的环境很重要,我当然不知道。

@Damien\u不信者的评论让我思考,他是对的,强者的名字是一样的,这不是真正的问题

我发现图书馆的两个版本之间的另一个区别;输出名称设置为
nnn.dll
nnnx64.dll
。更改它,使两者具有相同的输出名称,神奇地使其全部工作

也许有人知道为什么这样的设置很重要,我当然不知道。

你说“都是用.snk密钥签名的”-但是他们是用相同的密钥还是用不同的密钥签名的?(根据您的描述,目前两种解释都是可能的)如果它们使用相同的密钥签名,那么强名称应该是相同的。您说“都使用.snk密钥签名”-但是它们是使用相同的密钥签名还是使用不同的密钥签名?(根据您的描述,目前两种解释都是可能的)如果它们使用相同的密钥签名,则强名称应该是相同的。