Я не могу скомпилировать стандартную "библиотеку служб WCF" в формате x86 - PullRequest
9 голосов
/ 21 сентября 2010

Если я запускаю Microsoft Visual Studio, создаю стандартную «Библиотеку служб WCF» и скомпилирую ее, она отлично работает.

Однако, если я зайду в Properties..Build и установлю «Цель платформы»"к" x86 ", он не скомпилируется.Мне нужен "x86", потому что мне нужно ссылаться на некоторые .dll, которые просто не будут работать, если я выберу "Все платформы".

-----start error-----
System.BadImageFormatException: Could not load file or assembly 'file:///D:\backtest\C#\WCF service\WcfServiceLibrary\bin\Debug\WcfServiceLibrary.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name: 'file:///D:\backtest\C#\WCF service for\WcfServiceLibrary\bin\Debug\WcfServiceLibrary.dll'
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
   at Microsoft.Tools.SvcHost.ServiceHostHelper.LoadServiceAssembly(String svcAssemblyPath)

=== Pre-bind state information ===
LOG: User = dr-satellite\Shane
LOG: Where-ref bind. Location = D:\backtest\C#\WCF service for\WcfServiceLibrary\bin\Debug\WcfServiceLibrary.dll
LOG: Appbase = file:///D:/backtest/C#/WCF service for/WcfServiceLibrary/bin/Debug
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: D:\backtest\C#\WCF service for\WcfServiceLibrary\bin\Debug\WcfServiceLibrary.dll.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Attempting download of new URL file:///D:/backtest/C#/WCF service for/WcfServiceLibrary/bin/Debug/WcfServiceLibrary.dll.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.
-----end error-----

Ответы [ 2 ]

13 голосов
/ 16 марта 2012

Ваша проблема на самом деле - тестовый клиент WCF, жалующийся на то, что ваша библиотека служб WCF является 32-разрядной.Это связано с тем, что по умолчанию тестовый клиент WCF всегда работает в 64-битном режиме.

Вместо того, чтобы переходить к этапам перехода на приложение-службу WCF, чтобы вы могли отлаживать, я обнаружил следующие шаги на этом blog , который запускает тестовый клиент WCF в 32-битном режиме - и поэтому вы не увидите опубликованную ошибку.

  1. Скопируйте WcfSvcHost.exe и WcfTestClient.exe из C: \ programфайлы (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE в локальный каталог.Разумеется, сохраняйте резервную копию этого файла.
  2. Запустите командную строку Visual Studio 2010 (одна из ссылок в меню «Пуск» -> Visaul Studio 2010)
  3. "cdmsgstr "в каталог, где находится ваша копия WcfSvcHost.

  4. Выполнить команду «corflags / 32BIT + / FORCE WcfSvcHost.exe»

  5. Выполнить команду «corflags / 32BIT + / FORCE WcfTestClient»

  6. Скопируйте файлы туда, где вы их нашли.

Теперь ваши WcfSvcHost и WcfTestClient будут работать в 32-битном режиме, и вы сможете отлаживать!

7 голосов
/ 21 сентября 2010

Я нашел два хороших способа решения этой проблемы:

  1. Установка 64-битной версии Matlab означает, что вы можете скомпилировать 64-битные .dll, которые совместимы с 64-битной библиотекой WCF Service.Это устраняет необходимость компиляции в 32-битном режиме, поэтому не вызывает исключений при вызове 32-битной сборки.Это решение хорошо работает.
  2. В MSVS 2010 можно создавать проекты двух типов: «Библиотека служб WCF» и «Приложение-служба WCF».Хотя вы не можете собрать и запустить «Библиотеку служб WCF» в 32-разрядном режиме (она поддерживает только 64-разрядную версию), вы можете создать и запустить «Приложение-службу WCF» в 32-разрядном режиме.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...