Visual Studio 2010: как опубликовать веб-приложение ASP.NET в целевой папке с помощью MSBUILD? - PullRequest
6 голосов
/ 16 апреля 2011

В Visual Studio 2010 вы знаете, как изменить конфигурацию (отладку, выпуск и т. Д.), Щелкните правой кнопкой мыши проект в обозревателе решений, выберите команду «Опубликовать» и получите все важные файлы проекта веб-приложения для выбранной конфигурации. скопировать в целевую папку вместе с преобразованным xdt web.config? Ну, я ищу MSBUILD эквивалент именно этого.

Моя задача для вас: предоставьте ОДНУ ЛИНИЮ, которую мне нужно выполнить, в моей командной строке, чтобы выполнить это. Нет сторонних программ. Нет обучающих видео. Просто одна прямая команда, которую я могу буквально скопировать из вашего ответа, вставить в окно командной строки, изменить, если необходимо, для поддержки моей структуры каталогов, а затем нажать клавишу ввода.

Если нет, то, возможно, кто-то может предоставить ссылку на полный справочник MSBUILD, показывающий каждую команду, переключатель и значение, которые я могу использовать в командной строке.

Ответы [ 2 ]

6 голосов
/ 17 апреля 2011

Поместите ниже в ProjectPublish.MSBuild.xml файл (измените PropertyGroup при необходимости):

<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Publish"> 
    <PropertyGroup>
        <ProjectFile>Path\To\Web.csproj</ProjectFile>
        <PublishDir>Path\For\Publish\Output</PublishDir>
        <TempDir>Path\To\Temp\Folder</TempDir>
        <BuildConfig>Release|Debug</BuildConfig>
    </PropertyGroup>

    <Target Name="Publish">
        <MSBuild Projects="$(ProjectFile)"
                 Properties="Configuration=$(BuildConfig);WebProjectOutputDir=$(PublishDir);OutDir=$(TempDir)\;BuildingProject=true"
                 Targets="ResolveReferences;_CopyWebApplication" />
    </Target>
</Project>

Вызов этого из командной строки (или .bat файла) должен помочь:

%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ProjectPublish.MSBuild.xml
0 голосов
/ 21 августа 2011

Я нашел решение, которое искал по прошествии всех этих месяцев здесь

В случае, если вышеуказанная ссылка испортится, вот то, что там написано:

Выгрузите и отредактируйте ваш файл проекта.Ищите строку, где он импортирует Microsoft.WebApplication.targets.Будет выглядеть так:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

Под этой строкой вставьте этот XML:

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder">
    <Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." />
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" />

    <ItemGroup>
        <PublishFiles Include="$(_PackageTempDir)\**\*.*" />
    </ItemGroup>

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" />
</Target>

Теперь запустите это в командной строке в той же папке, что ифайл вашего проекта:

msbuild TestWebApp.csproj "/p:Platform=AnyCPU;Configuration=Debug;PublishDestination=C:\pub" /t:PublishToFileSystem

Не забудьте указать путь к MSBUILD в команде или добавить путь к вашей переменной окружения глобального пути (что я и сделал).На моей машине это было здесь:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

Чтобы проверить это, я поместил преобразование конфигурации в свой Web.Release.config, чтобы добавить ключ AppSetting (если вы это сделаете,убедитесь, что узел AppSettings присутствует в вашем базовом конфигурационном файле, иначе вы получите сообщение об ошибке).Когда я использовал приведенную выше команду для создания конфигурации отладки, ключ не присутствовал в опубликованном файле конфигурации, как ожидалось.Однако, когда я использовал конфигурацию выпуска, ключ был успешно добавлен в файл.

Я действительно хотел бы, чтобы Microsoft не запутала его.В любом случае, это самое простое решение, которое я нашел в Интернете.Я надеюсь, что это поможет остальным из вас.

...