ILMerge и веб - ресурсы
-
09-06-2019 - |
Вопрос
Мы пытаемся объединить наши библиотеки DLL в одну для развертывания, таким образом, ILMerge.Кажется, почти все работает отлично.У нас есть пара веб-элементов управления, которые используют ClientScript.RegisterClientScriptResource
и это 404-е после слияния (Они работали до слияния).
Например, один из наших элементов управления будет выглядеть следующим образом
namespace Company.WebControls
{
public class ControlA: CompositeControl, INamingContainer
{
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
this.Page.ClientScript.RegisterClientScriptResource(typeof(ControlA), "Company.WebControls.ControlA.js");
}
}
}
Он будет находиться в Project WebControls, сборочной компании.WebControls.Под ним были бы ControlA.cs и ControlA.js.ControlA.js помечен как встроенный ресурс.В AssemblyInfo.cs я включаю следующее:
[assembly: System.Web.UI.WebResource("Company.WebControls.ControlA.js", "application/x-javascript")]
После того, как это будет объединено в CompanyA.dll, как правильно ссылаться на этот веб-ресурс?Командная строка ILMerge выглядит следующим образом (из каталога bin после сборки): "C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../CompanySK.snk /wildcards:True /copyattrs:True /out:Company.dll Company.*.dll
Решение
Хорошо, у меня все получилось.Похоже, что основная сборка была единственной, атрибуты сборки которой копировались.При установленном copyattrs победит последний, а не слияние (насколько я могу судить).Я создал фиктивный проект для ссылки на другие библиотеки DLL и включил все веб-ресурсы из этих проектов в информацию о фиктивной сборке - теперь все несколько ресурсов из нескольких проектов загружаются корректно.
Окончательная командная строка после сборки для фиктивного проекта:"C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /ключевой файл: ../../Company.snk /подстановочные знаки: True /out:Company.dll Company.Merge.dll Company.*.dll
Другие советы
Вам нужно установить /AllowMultiple вместе с /copyattrs.Только после этого ILMerge объединит встроенные ресурсы из всех сборок.