强名称internalsvisibleto 32位.net 4.0

强名称internalsvisibleto 32位.net 4.0,.net,assembly-signing,.net,Assembly Signing,我有3个DLL(外部系统的API),我可以在Windows7 32位.NET4上的可执行文件中使用这些DLL 然后我需要用一个强名称对我的可执行文件进行签名 它要求API DLL也将使用相同的强名称进行签名,如果我理解正确的话 我看过一些帖子如何做到这一点(ildasm/ilasm,或者野蛮的开发者,或者加密模糊器),并尝试了我所做的一切。但仍然获得“强名称签名的程序集必须在其InternalsVisibleTo声明中指定公钥” 有人也去过那里并设法安全逃生吗 问候,, 奥伦 PS 1,我确实设

我有3个DLL(外部系统的API),我可以在Windows7 32位.NET4上的可执行文件中使用这些DLL

然后我需要用一个强名称对我的可执行文件进行签名

它要求API DLL也将使用相同的强名称进行签名,如果我理解正确的话

我看过一些帖子如何做到这一点(ildasm/ilasm,或者野蛮的开发者,或者加密模糊器),并尝试了我所做的一切。但仍然获得“强名称签名的程序集必须在其InternalsVisibleTo声明中指定公钥”

有人也去过那里并设法安全逃生吗

问候,, 奥伦

PS 1,我确实设法使其在64位Windows 7上工作(在那里,3 API的DLL是由以前的开发人员使用加密模糊器签名的)。我开始调查它在32位时不起作用,我意识到我正在使用签名DLL。然后,我找到了原始DLL,但在我的程序集和API中都只能在没有“强名称”的情况下运行。任何其他组合,即使我的程序集没有签名(或者所有内容都是据我所知签名的),也不起作用


PS 2,我还有我的另一个DLL,它与可执行文件配合得很好(我对这两个都签名,所以我总共有5个程序集,2个我的和3个给定的),我不确定它是否相关,但我还是把它带到了这里。

您的问题似乎是,在使用未签名的第三方库时,您需要对应用程序进行签名。您试图通过对第三方库进行签名来解决该问题,但这引入了新的错误

考虑到这个假设,问题很明显——第三方库的各个DLL都在使用彼此的内部结构(其中至少有一个对其他库中的至少一个这样做),这就是为什么它使用
InternalsVisibleTo
。您遇到的错误是因为您以一种不正当的方式对程序集进行了签名,并且没有确保程序集之间的所有引用都已更新-因此
InternalsVisibleTo
现在引用的是无效的DLL,这意味着.NET将禁止目标DLL使用另一个库的
internal
s

要解决此问题,您需要将第三方库中的
InternalsVisibleTo
声明更改为。这在IL中很容易做到——只需找到属性声明,并更改程序集名称以包含公钥(例如,从
InternalsVisibleTo(“MyLibrary”)
InternalsVisibleTo(“MyLibrary,PublicKey=4564651357987621321…”)


但是,我必须注意,这被认为是逆向工程,并且可能被第三方的许可所禁止。确保您所做的是合法的,如果不是,请直接与第三方提供商沟通,以找到合适的解决方案。

不是相同的强名称。您只需要在
InternalsVisibleTo
属性声明中指定公钥。关于这一点,错误信息非常清楚。为什么您要尝试侵入API DLL的内部?它们可能是内部的,是有原因的。我可以在可执行文件的InternalsVisibleTo中指定公钥。我试过这个。然而,我没有访问API DLL源代码的权限,我也不知道为什么我会被认为触及它们的内部。我只是按照他们举的一个例子。我在所有地方和所有尝试中都使用相同的强名称。这是我从调查中了解到的(尝试用相同的强名称对无法访问的DLL进行签名)。哦,您需要对应用程序进行签名,而第三方库没有签名版本?是的,这就是问题所在。在这种情况下有一些线索可以做,但我想我已经尝试了所有的方法,我会试试这个。这是一个非常有希望的想法。我将用我的发现更新线程。你可能是对的。我有3个API DLL的“ildasm”,其中2个包含InternalsVIsibleTo。接下来,我需要弄清楚如何更改该文件,因为它是这样给出的:“.custom instance void[mscorlib]System.Runtime.CompilerServices.InternalsVisibleToAttribute::.ctor(string)=(01 00 2…”,我将尝试用您描述的内容创建一个DLL并从中复制。@Oren-Yup。你可以很容易地找到正确的值-它应该在
il
文件中,或者你可以使用反射来获得完全限定的名称,其中也包含公钥。好的,你的线索很好,我也找到了。今天我对.Net程序集的了解比我想知道的还要多。没有设法使它仍然工作。但现在已经验证了它可以在64位(所有强名称签名的内容)上工作,并将尝试说服其他利益相关者。@Oren有趣。您确定程序集仍然是AnyCPU吗?也许您错误地将它们更改为仅64位?