#.net #asp.net #visual-studio-2010
#.net #asp.net #visual-studio-2010
Вопрос:
У меня есть ASP.NET веб-приложение 4.0, которое необходимо предварительно скомпилировать в единую сборку. Я поиграл с доступными опциями, и я получаю следующее:
1. При компиляции я получаю отдельную сборку для каждой страницы следующим образом:
- При компиляции я получаю единую сборку веб-приложения, но на реальном сервере каждая страница динамически компилируется и генерируется временный файл.
- Мне нужен способ скомпилировать мое веб-приложение в единую сборку, которая допускает обновления пользовательского интерфейса (HTML изменяет не код) и не генерирует временные файлы.
Ответ №1:
Самый простой способ сделать это — создать (или изменить) свой проект как (или в) «Asp.Net Веб-приложение «вместо «Asp.Net Веб-сайт».
Это приведет к тому, что ваш проект будет скомпилирован в единую библиотеку dll, а не по схеме «dll на страницу» или «dll в каталог», по которой обычно работают веб-сайты. Это также заставит вас решить любые проблемы с именами типов (НАПРИМЕР: если у вас вызвано 6 страниц Default
), важно, чтобы при создании одной сборки полные имена были уникальными.
Это предоставит вам соответствующий файл проекта (сценарий сборки) и выгрузит все ваши DLL-файлы в папку /bin при компиляции.
Затем вы можете использовать что-то вроде ILMerge, чтобы объединить все ваши сборки в папке / bin в единую dll, если это то, что вы хотите сделать. Предполагается, что все ваши ссылки являются управляемыми сборками, если у вас есть какие-либо другие .Net libs это будет намного сложнее, хотя все еще не невозможно.
Комментарии:
1. Это не то, о чем он просит. Он хотел бы предварительно скомпилировать свои страницы в dll. Сборка веб-приложения этого не делает.
2. @Cipher: Очевидно, вы пропустили ту часть в моем ответе, где я говорю использовать ILMerge для объединения сборок?
3. Нет, я ничего не пропустил. В вашем ответе не объясняется, как предварительно скомпилировать страницы. При создании веб-приложения только базовые классы компилируются в DLL веб-проекта. фактический код для рендеринга страниц компилируется по первому запросу и сохраняется во временных библиотеках DLL, как показано в его вопросе.
4. Я предлагаю вам попробовать это и опубликовать свои результаты. Веб-приложение, загруженное на мой рабочий стол прямо сейчас, предполагает иное.
5. Извините, я пропустил — прочитайте, что он на самом деле хотел. Ему не нужно предварительно скомпилированное приложение, а вместо этого веб-приложение из одной сборки. 1 за ваш ответ в этом случае.
Ответ №2:
Компилятор aspnet включен в состав платформы. Вот страница, описывающая, как ее использовать. http://msdn.microsoft.com/en-us/library/ms227972.aspx
Вот несколько дополнительных страниц для справки:
Комментарии:
1. Это не приведет к объединению ссылок (таких как elmah.dll из OP) в dll.
2. Это правильно. Этого не произойдет. На самом деле это также не решит его проблему. «Мне нужен способ скомпилировать мое веб-приложение в единую сборку, которая допускает обновления пользовательского интерфейса (HTML изменяет не код) » в этом случае да, рекомендуется веб-приложение.
Ответ №3:
AFAIK вы не можете обновить пользовательский интерфейс / html без перекомпиляции сервером страницы с использованием временных файлов
Все файлы .aspx, .ascx и т.д. Преобразуются в исходный код, а затем компилируются. Единственный метод ASP.NET для предотвращения этого необходимо также скомпилировать страницы и элементы управления, но тогда ваш сайт больше не будет обновляться. В этом случае вам всегда нужно будет повторно развертывать двоичные файлы для каждого обновления.
Любая конкретная причина, по которой вы не хотите ASP.NET для создания временных файлов? Я думаю, это вполне приемлемая практика.
Комментарии:
1. На нашем веб-сайте есть 5 типов страниц, например, TravelWebApp. Страна — это один тип и TravelWebApp. Город другого типа. Все страницы coutries наследуются от TravelWebApp. Страна (используя свойства директивы страницы). Это позволяет нам в любое время создавать новую страновую страницу на сервере без какой-либо повторной компиляции. Поскольку у нас более 500 000 страниц, генерируется множество временных файлов, и при перезапуске сервера загрузка сайта занимает целую вечность.
2. @Usman Вы имеете в виду, что вы создаете .aspx для каждой страны / города и т.д.? Почему бы не сохранить динамические биты в базе данных и просто повторно использовать ту же страницу? Или я вас неправильно понимаю?
3. Вы правильно это понимаете. Мы движемся к этому решению, но наш веб-сайт огромен, и нам потребуется время, чтобы добраться туда. Это было необходимо для краткосрочного решения.
4. Все ли файлы находятся в одной папке? Вы применили basic ASP.NET изменения производительности (например, установка debug =»false» для элемента компиляции в web.config)?