MSBuild - 确定解决方案的_PublishedWebsites

Dan*_*nny 4 msbuild

我正在编写一个Web开发目标文件,并希望以编程方式确定"_PublishedWebsites"下面显示的目录的名称.

我目前必须使用这个:

$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\ _ PublishedWebsites\MyWebApplication

有任何想法吗?

(我没有将此用于有多个网站发布的解决方案)

Sha*_*ser 11

.NET 4.0中的新Web发布管道(WPP)具有控制输出位置的方法.

首先,您需要在执行CopyWebApplication目标期间选择加入WPP.在命令行或MSBuild项目文件中设置以下MSBuild属性:

<PropertyGroup>
    <UseWPP_CopyWebApplication>True</UseWPP_CopyWebApplication>
    <PipelineDependsOnBuild>False</PipelineDependsOnBuild>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

命令行变量是:

/p:UseWPP_CopyWebApplication=True /p:PipelineDependsOnBuild=False
Run Code Online (Sandbox Code Playgroud)

接下来,在与项目相同的目录中创建一个新的MSBuild目标文件,并将其命名为"ProjectName.wpp.targets",其中"ProjectName"是项目的文件名,减去扩展名.换句话说,如果你有"MyWebsite.csproj",你需要创建"MyWebsite.wpp.targets".我发现将目标文件添加到项目中也很有帮助.它不是必需的,但它使编辑更容易.

在新目标文件中,您需要覆盖WebProjectOutputDir属性.只有在调用CopyWebApplication时才这样做 - 换句话说,当"OutDir"被重定向到"OutputPath"时:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <WebProjectOutputDir Condition="'$(OutDir)' != '$(OutputPath)'">$(OutDir)Websites\MyCustomFolderName</WebProjectOutputDir>
    </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

就是这样 - 你应该好好去.您可以通过设置OutDir属性在本地测试它.不要忘记尾随反斜杠:

msbuild MyWebsite.csproj /p:OutDir=C:\Development\WebOutputTest\
Run Code Online (Sandbox Code Playgroud)