2016-03-14 2 views
12

У меня есть приложение WPF, которое следует за шаблоном MVVM. Мы недавно подписали приложение, и теперь я получаю много исключений при первом запуске при запуске. Я проследил проблему к следующему:System.IO.FileLoadException при подписании приложения

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

"Could not load file or assembly 'MyApplication, Version=3.0.5917.24348, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)":"MyApplication, Version=3.0.5917.24348, Culture=neutral, PublicKeyToken=xxxxxxxxxxx" 

Его всегда ищет версию, 1 за версией, которую я фактически запускаю.

Если удалить ссылки на другие пространства имен из взглядов, то InitializeComponent() не бросает ошибку

Вид:

<UserControl x:Class="MyApplication.View.DiagnosticsView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:convert="clr-namespace:MyApplication.Converters" <!--Causes error--> 
      xmlns:behave="clr-namespace:MyApplication.Behaviors" <!--Causes error--> 
      xmlns:controls="clr-namespace:MyApplication.UserControls" <!--Causes error--> 

Если удалить эти ссылки, и пошевелить преобразователи и поведения в другой DLL, а затем ссылаться на них через DLL, нет проблем. Ошибки уходят. Также, если я не подписываю приложение, я не получаю ошибок. Я действительно не хочу ссылаться на эти вещи в другой DLL, кажется, что это должно работать нормально. Он также тратит около 30 секунд, бросая все эти ошибки, поскольку все представления создаются, поэтому я получаю удар по производительности. Я не понимаю, почему приложение пытается загрузить себя, и почему оно пытается загрузить более старую версию. Независимо от того, сколько раз я строю, ошибка всегда 1 версия позади.

Fusion Log:

*** Assembly Binder Log Entry (3/17/2016 @ 10:30:11 AM) *** 

The operation failed. 
Bind result: hr = 0x80131040. No description available. 

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 
Running under executable C:\tfs\Development\dev-feature\src\MyApplication\bin\Debug\MyApplication.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: DisplayName = MyApplication, Version=3.0.5920.15594, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx 
(Fully-specified) 
LOG: Appbase = file:///C:/tfs/Development/dev-feature/src/MyApplication/bin/Debug/ 
LOG: Initial PrivatePath = NULL 
LOG: Dynamic Base = NULL 
LOG: Cache Base = NULL 
LOG: AppName = MyApplication.exe 
Calling assembly : PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\tfs\Development\dev-feature\src\MyApplication\bin\Debug\MyApplication.exe.Config 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 
LOG: Post-policy reference: MyApplication, Version=3.0.5920.15594, Culture=neutral, PublicKeyToken=7b0591cb18d2a932 
LOG: GAC Lookup was unsuccessful. 
LOG: Attempting download of new URL file:///C:/tfs/Development/dev-feature/src/MyApplication/bin/Debug/MyApplication.DLL. 
LOG: Attempting download of new URL file:///C:/tfs/Development/dev-feature/src/MyApplication/bin/Debug/MyApplication/MyApplication.DLL. 
LOG: Attempting download of new URL file:///C:/tfs/Development/dev-feature/src/MyApplication/bin/Debug/bin/MyApplication.DLL. 
LOG: Attempting download of new URL file:///C:/tfs/Development/dev-feature/src/MyApplication/bin/Debug/bin/MyApplication/MyApplication.DLL. 
LOG: Attempting download of new URL file:///C:/tfs/Development/dev-feature/src/MyApplication/bin/Debug/MyApplication.EXE. 
LOG: Assembly download was successful. Attempting setup of file: C:\tfs\Development\dev-feature\src\MyApplication\bin\Debug\MyApplication.exe 
LOG: Entering run-from-source setup phase. 
LOG: Assembly Name is: MyApplication, Version=3.0.5920.15596, Culture=neutral, PublicKeyToken=7b0591cb18d2a932 
WRN: Comparing the assembly name resulted in the mismatch: Revision Number 
ERR: The assembly reference did not match the assembly definition found. 
ERR: Run-from-source setup phase failed with hr = 0x80131040. 
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated. 
+0

Я обнаружил, что если я установить жесткий вариант в свойствах приложения, такие как 3.0.0.0 я не получаю сообщение об ошибке. Однако, когда у меня есть версия 3.0. * Я получаю ошибки. – user1336827

+0

Как вы его подписываете? – FriendlyGuy

+0

Im проверяет «Подписать сборку» под вкладкой подписания в проекте -> свойства, а затем выбирает наш файл ключей. – user1336827

ответ

0

Возможно ли, что вы пытаетесь использовать strong-named URI references in your XAML? Например, установив AssemblyPublicKeyToken attribute your project file или изменив сгенерированный код для XAML?

Если ваши ссылки XAML используют сильное имя и вы используете постоянно меняющуюся версию, то ваш XAML может в конечном итоге, используя предыдущую версию проекта, так как ссылки генерируются до для сборки быть завершено (и установлена ​​новая версия).

Чтобы проверить, найти сгенерированный для XAML под директорией obj и проверьте Юриса (например ~\obj\Debug\TestControl.g.i.cs):

System.Uri resourceLocater = new System.Uri("/T_Signing;V1.0.0.0;76005ee8ffcf5f2d;component/testcontrol.xaml", System.UriKind.Relative); 

Над URI имеет полное название и версию. Принимая во внимание, если у вас нет сильных именованных ссылок, УИР будет больше похож:

System.Uri resourceLocater = new System.Uri("/T_Signing;component/testcontrol.xaml", System.UriKind.Relative); 
+0

System.Uri resourceLocater = новый System.Uri ("/ MyApplication; компонент/view/system/systeminformationview.xaml", System.UriKind.Relative); - это то, что у меня есть, чтобы значит, что они сильно не названы? Так как я могу это исправить? – user1336827

+0

@ user1336827 в вашем случае сильные имена будут плохими. Тот факт, что ваша ссылка не имеет открытого ключа, означает, что вышеуказанный ответ может не применяться к вам. Вы знаете, есть ли у проекта какие-либо предварительные шаги? – FriendlyGuy

+0

нет событий до или после сборки. Решение имеет 4 проекта, однако данный проект не ссылается ни на один из других, и никто из других не ссылается на него. Я не думаю, что это будет иметь эффект. – user1336827

1

Edit:

вы используете ProcessMonitor, чтобы увидеть, где Visual Studio загружается V 3.0.5917 ли. от? Visual Studio хочет v3.0.5920. , поэтому вам нужно поставить ту DLL, где ее ожидали.

Edit 2:

Can you put in a binding redirect in your config file like this?

<dependentAssembly> 
<assemblyIdentity name="xxxxxx" publicKeyToken="121fae78165ba3d4"/> 
<bindingRedirect oldVersion="3.0.5920.15596" newVersion="3.0.5917.24348"/> 
</dependentAssembly> 

Ref: .Net picking wrong referenced assembly version

Оригинал:

Одна из причин, вы можете получить сообщение об ошибке:

Could not load file or assembly 'MyApplication, Version=3.0.5917.24348, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

Когда ваша сборка подписана, и ваша ссылка на нее имеет свойство Специфическая версия, равное True, в результате возникает исключение FileLoadException.

Проверьте у вас есть определенная версия устанавливается в значение False:

enter image description here

+0

У меня нет ссылки на проект в проекте ... MyApplication - это запущенное приложение. И он жалуется, что он не может загружать себя, потому что версия не соответствует. – user1336827

+0

О, ну стоит упомянуть –

+0

Можете ли вы загрузить решение голой кости на сайт tempsend.com для воспроизведения? –

Смежные вопросы