Сборка TFS с добавлением блока нежелательного кода в файл xap Microsoft.Practices.ServiceLocator - PullRequest
0 голосов
/ 23 сентября 2011

Вот список моих ссылок в моем проекте Silverlight.

Microsoft.Practices.Unity.Silverlight<br/>
mscorelib<br/>
Prospector.ProviderMatching.LinkedDataObjects<br/>
Prospector.ProviderMatching.SLDataObjects<br/>
System<br/>
System.ComponentModel.DataAnnotations<br/>
System.Core<br/>
System.Net<br/>
System.ServiceModel<br/>
System.Windows<br/>
System.Windows.Browser<br/>
System.Windows.Controls<br/>
System.Windows.Controls.Data.Input<br/>
System.Windows.Controls.Toolkit<br/>
System.Windows.Data<br/>
System.Xml<br/>

Когда я строю проект локально, содержимое моего xap-файла выглядит следующим образом.

AppManifest.xaml
Microsoft.Practices.Unity.Silverlight.dll
Prospector.ProviderMatching.DataObjects.SL.dll
Prospector.ProviderMatching.Silverlight.dll
Prospector.ProviderMatching.SLDataObjects.dll
ServiceReferences.ClientConfig
System.ComponentModel.DataAnnotations.dll
System.Windows.Controls.Data.dll
System.Windows.Controls.Data.Input.dll
System.Windows.Controls.dll
System.Windows.Controls.Toolkit.dll
System.Windows.Controls.Toolkit.Internals.dll
System.Windows.Data.dll

Когда этот флажок установлен и сервер сборки запускается, он создает файл xap со следующим содержимым.

AppManifest.xaml
Microsoft.Practices.ServiceLocation.dll
Microsoft.Practices.Unity.Silverlight.dll
Prospector.ProviderMatching.DataObjects.SL.dll
Prospector.ProviderMatching.Silverlight.dll
Prospector.ProviderMatching.SLDataObjects.dll
ServiceReferences.ClientConfig
System.ComponentModel.DataAnnotations.dll
System.Windows.Controls.Data.dll
System.Windows.Controls.Data.Input.dll
System.Windows.Controls.dll
System.Windows.Controls.Toolkit.dll
System.Windows.Controls.Toolkit.Internals.dll
System.Windows.Data.dll

Как видите, я получил блок кода в xap-файле, который приложение не использует. Однако это не только трата пропускной способности, но и фактически предотвращает выполнение приложения silverlight, оно загружается, но не запускается.

Если я удаляю оскорбительный файл Microsoft.Practices.ServiceLocator.dll из xap-файла и manifest.xml, то приложение silvlight функционирует должным образом.

У кого-нибудь есть идеи, почему сервер сборки включает эту библиотеку и как предотвратить это ...?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Майлз действительно дошел до сути дела, и я просто добавил это для более подробной информации о моей конкретной проблеме.

Проблема заключалась в том, что .net-версия ServiceLocator была встроена в xap на сервере сборки.

Я думаю, что причина, по которой он не был встроен локально, заключалась в том, что он был решен GAC.

Я взял копии файлов Microsoft.Practices.Unity.silverlight.dll и Microsoft.Practices.ServiceLocator.dll и добавил их в общую двоичную папку, которая включена в систему контроля версий, на которую может ссылаться сервер сборки. Затем я удалил Unity для Silverlight 2.0 из установленных программ (я полагаю, это де-Gaced это). Я добавил ссылки на вышеупомянутые dll, которые теперь находились в моей двоичной папке, и создал мое решение локально. Hay presto У меня теперь есть Microsoft.Practices.ServiceLocator.dll, включенный в мой файл xap.

После того, как все это было проверено в TFS, сборка теперь выбрала нужную версию Microsoft.Practices.ServiceLocator.dll из общей папки binarys и включила ее в xap. Работа выполнена. Я думаю, что причина этой проблемы лежит в глобальном кэше сборок.

Надеюсь, это поможет кому-то одинаково расстроенному.

0 голосов
/ 23 сентября 2011

Я думаю, что Microsoft.Practices.ServiceLocation.dll продолжает добавляться, так как у вас есть ссылка на Microsoft.Practices.Unity.Silverlight.dll У меня такое ощущение, что они зависят друг от друга. Вам нужно использовать Unity? Относительно того, почему ваше приложение перестает работать, когда Microsoft.Practices.ServiceLocation.dll включен в XAP; У меня есть подозрение, что вы используете не ту версию Microsoft.Practices.Servicelocation.dll (версия WPF?)

...