MSBuild - 如何确定一个解决方案的_PublishedWebsites?

4
我正在编写一个Web开发目标文件,并希望以编程方式确定出现在“_PublishedWebsites”下的目录名称。
我目前必须使用以下内容: $(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\_PublishedWebsites\ MyWebApplication 有什么想法吗?
(我不会用于发布多个网站的解决方案)

是的。升级到TFS 2010并使用C#自定义构建,而不是使用MSBuild :) - Danny
啊,我们尝试了TFS2010,但它并没有提供我们所需的一切功能,所以我们转向了FogBugz、Kiln,并且我正在为我们设置一些CCNet项目用于持续集成。如果我们是SharePoint开发人员,能够轻松地创建我们在TFS中所需的自定义部分,或许我们就能使用它了... - jcolebrand
1个回答

12

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

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

<PropertyGroup>
    <UseWPP_CopyWebApplication>True</UseWPP_CopyWebApplication>
    <PipelineDependsOnBuild>False</PipelineDependsOnBuild>
</PropertyGroup>

命令行版本是:

/p:UseWPP_CopyWebApplication=True /p:PipelineDependsOnBuild=False

接下来,在与您的项目相同的目录中创建一个新的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>

就是这样 - 你应该可以开始使用了。通过设置OutDir属性,您可以在本地测试它。不要忘记后面的反斜杠:

msbuild MyWebsite.csproj /p:OutDir=C:\Development\WebOutputTest\

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接