Работают ли проекты веб-развертывания с конфигурацией сборки x86? - PullRequest
4 голосов
/ 04 июня 2010

Мне нужно создать сайт и несколько библиотек DLL, на которые он ссылается в конфигурации x86. До настоящего времени мы использовали проекты веб-развертывания для создания Zip-файлов конечного сайта и всех необходимых файлов. Однако нам нужно продолжать использовать WDP, похоже, у них проблемы с конфигурацией сборки x86.

В моем проекте при сборке решения в Release / x86 я получаю следующую ошибку.

           Description                              File                           Line   Column   Project
Error  80  Could not load type 'WwwRooot.Default'.  /WwwRooot.csproj/Default.aspx  1      1        WwwRooot.csproj_deploy

Нет ошибок сборки или предупреждений от веб-приложения или любой из библиотек классов, на которые есть ссылки.

Я подумал, что это может быть что-то особенное для проекта, над которым я работаю, поэтому, чтобы доказать, что я не прав, я создал решение, содержащее веб-приложение (c #). Затем я использовал Configuration Manager для создания конфигурации x86, скопировав конфигурацию Any CPU. Я проверил страницу свойств и убедился, что новая конфигурация настроена для сборки на x86, и это так. Я построил решение без ошибок.

Затем я щелкнул правой кнопкой мыши веб-приложение и добавил WDP из контекстного меню. Щелкните правой кнопкой мыши на WDP и отредактируйте файл проекта. На этом этапе я изменил все ссылки для AnyCPU на x86, чтобы WDP соответствовал условиям сборки x86. Я перестроил решение в Release / x86, и все работает нормально.

Затем я добавляю библиотеку классов, использую Configuration Manager для создания конфигурации x86 для этой библиотеки, добавляю ссылку на веб-приложение для библиотеки, а затем перестраиваю все в Release / x86, и я получаю ту же ошибку, что подробно описана выше.

Совместимы ли WDP с сборкой x86?

Если я удалю Библиотеку классов (и ссылку), решение (включая WDP) будет работать нормально.

Я использую Visual Studio 2008 SP1 с установленными соответствующими WDP на 64-битной Windows 7 Pro.

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

Изначально проекты Web Deployment Projects (WDP) не работают с конфигурациями сборки x86 или x64. Это связано с тем, что веб-приложение, созданное в рамках одной из этих конфигураций, выводит результирующие сборки в другом месте, и WDP не знает, где искать библиотеки DLL.

Есть несколько вещей, которые вам нужно сделать, чтобы WDP работал с вашей конфигурацией x86.

Во-первых, ваш WDP, вероятно, не имеет конфигурации x86, вам нужно ее создать. Отредактируйте проект развертывания с помощью редактора XML в Visual Studio (или любом текстовом редакторе), в верхней части файла появится тег <propertyGroup> (обычно второй) с условием Debug|AnyCPU, например:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>.\Debug</OutputPath>
    <EnableUpdateable>true</EnableUpdateable>
    <UseMerge>true</UseMerge>
  </PropertyGroup>

Дублируйте весь этот тег и измените конфигурацию на Debug|x84:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>.\Debug</OutputPath>
    <EnableUpdateable>true</EnableUpdateable>
    <UseMerge>true</UseMerge>
  </PropertyGroup>

Теперь сохраните файл и откройте диспетчер конфигурации (меню «Сборка»> «Диспетчер конфигурации») и проверьте, что ваш проект развертывания теперь имеет конфигурацию x86.

Теперь отредактируйте файл проекта веб-приложения с помощью текстового редактора и найдите элемент outputPath в конфигурации Debug|x86. Он должен иметь значение Bin\x86\Debug. Это нужно изменить на Bin:

 <!-- Before -->
 <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <OutputPath>Bin\x86\Debug\</OutputPath>

 <!-- After -->
 <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <OutputPath>Bin\</OutputPath>

Сохраните, закройте и перезагрузите ваш проект веб-приложения. Теперь мы дали указание веб-приложению поместить библиотеки DLL туда, где их ожидает WDP.

Установите конфигурацию сборки на x86 и соберите проект.

Промойте и повторите для Release и любых других конфигураций сборки, которые у вас могут быть.

1 голос
/ 17 мая 2012

Попробуйте это

Поместите эту команду в события посткомпиляции вашего веб-проекта

xcopy "$(TargetDir)*.*" "$(TargetDir)..\..\" /Y

Эта команда будет копировать файлы из bin \ x86 \ Debug в bin Будет работать с конфигурацией релиза

...