Использование проектов веб-развертывания VS 2008 с ASP.NET MVC

У кого-нибудь есть проект веб-развертывания для работы с ASP.NET MVC? Когда я открываю «развернутый» проект, многие файлы, которые требуются MVC, отсутствуют, что затрудняет публикацию на сервере всех недостающих файлов в проекте.

Или ... Есть ли лучший способ, чем проект веб-развертывания, изменить Web.Config для приложений MVC? У меня есть различия (SMTP и строки подключения), которые необходимо обновить перед загрузкой, и проекты веб-развертывания кажутся правильным методом.

Спасибо как всегда!

Обновление: мне не хватает хотя бы global.asax, global.asax.cs и default.aspx.cs.

Обновление 2: после публикации я получаю эту ошибку. Could not load type 'AppNamespace._Default'.

Ответов (4)

Решение

Я еще не настроил проект развертывания с моим приложением mvc, но я использовал эту технику, описанную Скоттом Хансельманом, и она отлично работает.

Управление средами с несколькими файлами конфигурации

Я обнаружил, что это работает для меня.

Когда вы говорите, что отсутствуют файлы, вы имеете в виду файлы System.Web.Mvc и тому подобное? Вам необходимо убедиться в том, что в вашем веб-приложении эти ссылки настроены для локального копирования.

Все 3 указанных файла скомпилированы в двоичный файл, созданный вашим веб-проектом ASP.NET MVC. Откройте свой .csproj, и вы увидите:

<Compile Include="Global.asax.cs">
  <DependentUpon>Global.asax</DependentUpon>
</Compile>
<Compile Include="Default.aspx.cs">
  <DependentUpon>Default.aspx</DependentUpon>
  <SubType>ASPXCodeBehind</SubType>
</Compile>

Откройте свой двоичный файл в таком инструменте, как Reflector, и вы увидите классы. Поэтому развертывать их не нужно.

Эти шаги MSBuild в MVC .csproj делают часть того, что делает проект веб-развертывания (т. Е. Компилирует один двоичный файл для сайта), избыточным.

Что касается замены токена, вы можете либо сохранить свой проект развертывания, либо, возможно, скопировать соответствующие шаги MSBuilds из вашего файла .wdproj в файл .csproj. Я не делал этого, но скоро попробую.

Я успешно развернул IIS6 с помощью проекта веб-развертывания. Сначала у меня были проблемы с развертыванием на Server 2003, но в моем случае это действительно была проблема сценической среды. Сначала я развернул локальный IIS, чтобы проверить, не проблема ли это сборки или среды. Конфигом - заменой не пользовался.

Это мой сценарий сборки:

C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe "D:\Projekte\NiceProjectName\source\NiceProjectName_Build\NiceProjectName_Build.wdproj" /t:Build /p:Configuration=Release 

Вот мой wdp:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.21022</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{E5E14CEB-0BCD-4203-9A5A-34ABA9C717EA}</ProjectGuid>
    <SourceWebPhysicalPath>..\NiceProjectName</SourceWebPhysicalPath>
    <SourceWebProject>{3E632DB6-6DB3-4BD0-8CCA-12DE67165B48}|NiceProjectName\NiceProjectName.csproj</SourceWebProject>
    <SourceWebVirtualPath>/NiceProjectName.csproj</SourceWebVirtualPath>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>.\Debug</OutputPath>
    <EnableUpdateable>true</EnableUpdateable>
    <UseMerge>true</UseMerge>
    <SingleAssemblyName>NiceProjectName_Build</SingleAssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugSymbols>false</DebugSymbols>
    <OutputPath>..\..\deploy</OutputPath>
    <EnableUpdateable>false</EnableUpdateable>
    <UseMerge>true</UseMerge>
    <SingleAssemblyName>NiceProjectName</SingleAssemblyName>
  </PropertyGroup>
  <ItemGroup>
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\WebDeployment\v9.0\Microsoft.WebDeployment.targets" />
</Project>