2012-01-22 2 views
1

Успешен ли какой-либо успешно iLMerged Enterprise Library 5.0? ILMerge успешно создает DLL слитый и мой MVC приложение компилируется, но при запуске приложения я получаю следующее сообщение об ошибке:iLMerge Enterprise Library 5.0

SecurityTransparent and SecurityCritical attributes cannot 
be applied to the assembly scope at the same time. 
+0

просто из любопытства, почему вы пытаетесь объединить DLL файлы? – Lloyd

+0

К сожалению, наша команда Dev приняла решение пару лет назад в iLMerge большинству сторонних библиотек, которые мы используем, так как мы имеем в общей сложности около 50 проектов, которые должны ссылаться на эти DLL. Они считали, что было бы проще просто ссылаться на одну DLL в каждом проекте, а не ссылаться на каждую dll. Это решение, за которое мы все еще платим, так как оно давало мне головную боль каждый раз, когда мы сталкиваемся с проблемой. – PCG

ответ

4

ILMerge отлично, если вы написали все сборки, которые вы пытаетесь объединить, и вы знаете, что ни одна из они делают предположения об организации сборки. Но при многих обстоятельствах (особенно в тех случаях, когда задействованы тяжелые размышления или динамический язык Runtime), ILMerge просто не работает. Иногда вещи случаются неожиданно и загадочно.

Когда ILMerge терпит неудачу, Джеффри Рихтер h a more reliable way to get applications with multiple DLL dependencies to be deployable as a single assembly.

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

Это не без компромиссов, но даже автор ILMerge Майк Барнетт в комментариях к сообщению в блоге «Как автор ILMerge, я думаю, что это фантастика! Если бы я знал об этом , Я бы никогда не написал ILMerge ».

Если вы можете использовать метод Рихтера, вы не будете путешествовать по большинству ловушек отражения или динамизма.

Реализации шаги

  1. Вставить все из сторонних сборок, которые вы зависите в ресурсах вашего приложения.
  2. Зарегистрировать ResolveEventHandler с событием AppDomain.CurrentDomain.AssemblyResolve.
  3. Когда ваш обработчик вызывается с помощью сборки, которую вы спрятали в Ресурсах, загрузите сборку.

Вы делаете часть 3 следующим образом:

var resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name); 
return Assembly.Load(new BinaryReader(resourceStream).ReadBytes(int.MaxValue)); 
+0

В моем проекте консольного приложения у меня нет опции «Создать действие» в свойствах ссылочных ассемблеров. Итак, как я должен установить их как «Встроенный ресурс». ? –

0

Попытки слить только библиотеки DLL, которые являются частью вашего приложения, а не рамочные из них (систем. Web.Mvc.dll, System.Web.Routing.dll и System.Web.Abstractions.dll)

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