2016-08-13 7 views
0

я пытался пропустить .net сильную проверку имен на обоих Win10 & Win7, после How to disable strong name validation и this введите следующий comamnds на x86 и amd64 среды.Не может пропустить .net сильную проверку имени на окнах

vcvarsall.bat amd64 
sn /Vr * 
vcvarsall.bat x86 
sn /Vr * 

, но по-прежнему получать жалобы:

=== Pre-bind state information === 
LOG: User = US\Hauck 
LOG: DisplayName = TestDll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b1cf2005f5cbe0bd (Fully-specified) 
LOG: Appbase = file:///D:/myprojects/bin/ 
LOG: Initial PrivatePath = NULL 
Calling assembly : TestDriver, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b1cf2005f5cbe0bd. 
=== 
LOG: This bind starts in default load context. 
LOG: No application configuration file found. 
LOG: Using machine configuration file from c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Post-policy reference: TestDll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b1cf2005f5cbe0bd 
LOG: Attempting download of new URL file:///D:/myprojects/bin/TestDll.DLL. 
WRN: Comparing the assembly name resulted in the mismatch: PUBLIC KEY TOKEN 
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated. 

После прибегая к помощи много я до сих пор понятия не имею, как пропустить проверку.

Ссылки:

  1. How to: Enable a 64-Bit Visual C++ Toolset on the Command Line
  2. Bypassing strong-name verification for a .Net assembly
  3. How to: Disable the Strong-Name Bypass Feature
+0

Вы преследуете неправильное решение, проблема в том, что файл Interop.PCOMMSERVERLib.dll, найденный во время выполнения, не совпадает с тем, с которым вы скомпилировали свою программу. Что не является необычным, не совсем очевидно, что вам нужно использовать параметр/keyfile в Tlbimp.exe. В частности, если это не было сделано вами. Независимо от того, что вы сделали, чтобы исправить ошибку компилятора, у вас возникли проблемы. Исправьте проблему, скопировав измененную dll dll, желательно всегда с помощью Copy Local = True. И обновите свой инструментарий, и поныне до сих пор не нужны библиотеки взаимодействия. –

+0

Спасибо за ответ, @Hans, теперь у меня обновлен мой журнал, сильные имена referencedll.dll и runtime testdll.dll отличаются, я использую его для проверки пропуска проверки, и он не работает должным образом. – Cosmore

+0

Опять же, это не имеет ничего общего с сильной проверкой имени. Имя сборки отличается. Обычно вы можете написать bindingRedirect в файле app.exe.config, чтобы заставить совпадение, но это не работает в конкретном случае, когда PublicKeyToken имеет значение null. Решение слишком просто, чтобы потерять сон, сборка interop не содержит никакого кода, поэтому просто скопируйте правильную DLL. –

ответ

1

Ключевой маркер общественности является частью идентичности сборки. Это означает, что если у вас есть два узла:

TestDriver, Version = 0.0.0.0, культура = нейтральной, PublicKeyToken = b1cf2005f5cbe0bd

и

TestDriver, Version = 0.0.0.0, культура = нейтральной, PublicKeyToken = null

Они видны как совершенно разные при загрузке. Мне кажется, что проблема заключается в том, что вы ссылаетесь на сильную именованную версию сборки, но имеете только неподписанную версию.

Если вы сами создаете TestDriver, вам необходимо убедиться, что у вас есть открытая половина пары ключей, с которой она в конечном итоге будет доступна для подписки, а затем установите флажок «Задержать только знак» на странице подписи свойства сборки в Visual Studio. Это создаст версию TestDriver, которая имеет токен открытого ключа, но который фактически не подписан. В этот момент необходимо отключить проверку подписи, но после отключения сборка должна загрузиться.

+0

Вы правы, @Mike, я неправильно понял сильное имя, задержка, подписанная dll, не может быть загружена, если не отключить сильную проверку имени; сильное имя используется только для версии и не может использоваться для защиты dll от взлома. – Cosmore