Создание проекта сайта как 32-битного на 64-битном сервере сборки - PullRequest
19 голосов
/ 20 декабря 2010

У меня есть решение VS 2010, которое содержит веб-сайт с веб-службой.Веб-сервис ссылается на COM-DLL, которая вызывает проблемы, когда решение построено на нашем 64-битном сервере сборки.Я получаю типичную 32/64-битную ошибку:

ASPNETCOMPILER: ошибка ASPCONFIG: не удалось загрузить файл или сборку 'xxx' или одну из ее зависимостей.Была предпринята попытка загрузить программу с неправильным форматом

Когда я собираю сайт с помощью 32-битного aspnet_compiler, он собирается нормально.Итак, как мне указать, что сайт должен быть построен как 32-битный?Диспетчер конфигурации в VS позволит мне выбрать любой ЦП, поэтому я не могу изменить его на x86 для этого веб-сайта ...

Спасибо.

Ответы [ 6 ]

8 голосов
/ 22 мая 2011

Вы можете использовать следующую команду.На самом деле, в этом случае вы используете ASPNetCompiler x86 edition для создания собственного проекта

call "C:\Program Files\Microsoft Visual Studio 2008\VC\vcvarsall.bat" x86
MSBuild MySolutiuon.sln 

. Вы также можете использовать x86_amd64 для любого процессора.Обратите внимание, что вместо использования MSBuild вы можете загрузить свою конфигурацию, например

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Target Name="PrecompileWeb">
     <AspNetCompiler
         VirtualPath="/MyWebSite"
         PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
         TargetPath="c:\precompiledweb\MyWebSite\"
         Force="true"
         Debug="true"
         FixedNames="True"
     />
 </Target>
</Project> 

, чтобы использовать вышеуказанную конфигурацию, вы должны использовать

MSBuild your.xml /p:Configuration=Release
1 голос
/ 22 мая 2011

@ Vilx, проверь ходунком зависимостей, чтобы узнать, как далеко он продвинется. Я думаю, что это, вероятно, остановится на vjsnativ.dll. Если это так далеко, попробуйте этот обходной путь .

В противном случае вам придется искать каждую DLL, которую программа не может найти, и копировать их в каталог вашей программы (или ее bin ).

0 голосов
/ 15 декабря 2011

Хотя это старый вопрос, я столкнулся с той же проблемой, и у меня были некоторые проблемы с поиском ответа.

Visual studio предлагает два варианта разработки веб-приложений: веб-сайты и веб-приложения. Мы приложения генерируем сборки на странице, которые динамически обновляются при изменении источника. С другой стороны, проекты веб-приложений компилируются в visual studio в одну сборку. Эта сборка не перестраивается автоматически после внесения изменений в исходный код. Различия подробно объясняются в этом документе: http://msdn.microsoft.com/en-us/library/aa730880(VS.80).aspx#wapp_topic5

Другое отличие, которое имеет отношение к этому, заключается в том, что проекты веб-приложений позволяют вам фактически выбирать архитектуру, в отличие от проектов веб-сайтов . Преобразование веб-сайта в веб-приложение не очень сложно, но не слишком просто (опция преобразования в веб-приложение доступна только после создания ... веб-приложения). Шаги, которые вы можете предпринять:

  1. Создание нового пустого веб-приложения.
  2. Перейдите в каталог нового веб-приложения и скопируйте все файлы с вашего сайта (перезаписав что-либо в каталоге)
  3. Добавить все файлы в проект
  4. Щелкните правой кнопкой мыши проект и выберите «Преобразовать в веб-приложение».
  5. Может потребоваться решить несколько проблем с пространством имен.
0 голосов
/ 24 мая 2011

Щелкните правой кнопкой мыши свой веб-проект в Visual Studio.
Выберите «Свойства».
Нажмите на вкладку «Сборка» слева.
В разделе «Общие» измените «Platform Target» на «x86», чтобы он всегда собирался для 32-разрядных.

Теперь, когда вы делаете это, вы можете заметить на той же вкладке «Сборка», что «Конфигурация» установлена ​​на «Актив (Отладка)». Вам нужно будет изменить этот раскрывающийся список на все имеющиеся у вас различные параметры конфигурации (например, «Release», «QA», «Staging», «Demo» и т. Д.) И изменить «Platform Target» на « x86 "для каждого.

Не забудьте нажать кнопку «Сохранить», когда закончите - не забудьте установить ее обратно на «Отладка», если вы находитесь в окне разработки.

Возможно, поэтому он работает только при сборке на компьютере, а не на сервере сборки , поскольку сервер сборки, скорее всего, настроен на сборку с другой конфигурацией - что правильно, потому что вы не должны использовать конфигурацию «Debug» на сервере сборки.

0 голосов
/ 19 мая 2011

Вам необходимо использовать ASP.NET Compilation Tool (Aspnet_compiler.exe) . В конце документа найдите главу «Поиск правильной версии Aspnet_compiler.exe», в которой объясняется, как найти 32-разрядную и 64-разрядную версии инструмента.

0 голосов
/ 20 декабря 2010

Это не проблема компиляции, а проблема среды.Веб-сайт ASP.NET всегда будет построен как Любой ЦП.

Однако, если вы загрузите его на 64-разрядную машину, по умолчанию работает 64-разрядная версия IIS, которая не может загрузить COM DLL, и это не удается.

Необходимо настроить IIS для запуска 32-разрядных приложений в 64-разрядной Windows: http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/iis/405f5bb5-87a3-43d2-8138-54b75db73aa1.mspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...