2015-09-30 2 views
0

Когда я попытался подписать мой проект, я обнаружил, что Fusion пытается загрузить определенные DLL, которые не существуют. Это, очевидно, не удастся, но я не понимаю , почему пытается загрузить эти DLL. Я не могу найти ссылки на эти DLL в любом месте в различных проектах, которые я использую.Fusion пытается загрузить сборку, которая нигде не указана

fuslogvw дал следующий результат для одного из этих библиотек DLL:

*** Assembly Binder Log Entry (28-9-2015 @ 16:29:53) *** 

The operation failed. 
Bind result: hr = 0x80070002. The system cannot find the file specified. 

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 
Running under executable D:\Projects\<snip>.vshost.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: DisplayName = RecentItemsManager.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b9588042c0f5ae4b, processorArchitecture=MSIL 
(Fully-specified) 
LOG: Appbase = file:///D:/Projects/<snip>/bin/Debug/ 
LOG: Initial PrivatePath = NULL 
LOG: Dynamic Base = NULL 
LOG: Cache Base = NULL 
LOG: AppName = <snip>.vshost.exe 
Calling assembly : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: D:\Projects\<snip>\bin\Debug\<snip>.vshost.exe.Config 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. 
LOG: Post-policy reference: RecentItemsManager.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b9588042c0f5ae4b, processorArchitecture=MSIL 
LOG: GAC Lookup was unsuccessful. 
LOG: Attempting download of new URL file:///D:/Projects/<snip>/bin/Debug/RecentItemsManager.XmlSerializers.DLL. 
LOG: Attempting download of new URL file:///D:/Projects/<snip>/bin/Debug/RecentItemsManager.XmlSerializers/RecentItemsManager.XmlSerializers.DLL. 
LOG: Attempting download of new URL file:///D:/Projects/<snip>/bin/Debug/RecentItemsManager.XmlSerializers.EXE. 
LOG: Attempting download of new URL file:///D:/Projects/<snip>/bin/Debug/RecentItemsManager.XmlSerializers/RecentItemsManager.XmlSerializers.EXE. 
LOG: All probing URLs attempted and failed. 

В этом случае пытается загрузить RecentItemsManager.XmlSerializers, которые могли бы в какой-то момент существовали в одном из проектов, но был удален довольно несколько месяцев спустя. Я попытался использовать Windows Grep для поиска любых экземпляров этих строк на большинстве своих дисков, но ничего не может найти. Есть ли у кого-нибудь идеи о том, как я могу это исправить?

+0

Вы пытались создать свой код на чистой машине (которая раньше не использовалась для создания кода)? – xxbbcc

+0

[Вот сообщение] (http://stackoverflow.com/questions/2209443/c-sharp-xmlserializer-bindingfailure) о том, что вы не можете найти XmlSerializers. Принятый ответ указывает, что это ожидаемое поведение и что исключение поймано и обработано внутри рамки. – ama1111

+0

@xxbbcc Я пробовал его в чистом репозитории без везения, но я попробую его и на чистой машине. Спасибо за предложение. – MSC

ответ

0

После ссылки @ ama1111 Я провел некоторое исследование и обнаружил, что XmlSerializers .NET генерируются во время выполнения. Мне удалось собрать отсутствующие dll с помощью sgen, и теперь он больше не жалуется на недостающие DLL, поскольку они создаются во время компиляции.

Вы можете автоматически создавать эти DLL в Visual Studio в свойствах проекта на вкладке «Сборка». Если вы включите Сгенерируйте сериализующую сборку, чтобы она всегда должна их строить. Однако он делает это только для сериализации webservice. Когда вы используете свои собственные классы XmlSerialization, он не будет генерировать dll, если вы не убедитесь, что sgen не работает с параметром/p (roxytypes). Вы не можете указать это на вкладке Visual Studio сборки, но вы можете редактировать файл csproj, чтобы сделать это:

<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies> 
<SGenUseProxyTypes>false</SGenUseProxyTypes> 

Единственное, что до сих пор меня смущает то, что я не могу быть первым человеком когда-либо, что хочет добавьте сильное имя в проект, содержащий XmlSerializer. Если поведение по умолчанию заключается в том, чтобы генерировать эти DLL во время выполнения, я не вижу, как это будет работать из коробки для всех.