MSBuild不尊重ClickOnce应用程序的PublishUrl属性

时间:2009-12-17 05:19:45

标签: msbuild clickonce

我正在尝试制作批处理文件,只需点击一下即可发布我们拥有的少数ClickOnce应用程序。我正在使用msbuild,作为示例,下面的命令行显示了我是如何做到的:

msbuild
    MyApp.sln
    /t:Publish
    /p:Configuration=Release
    /p:PublishUrl="C:\Apps\"
    /v:normal > Log.txt

(包装更易于阅读)

当我运行上面的命令时,它在发布目录中构建并发布应用程序,即bin \ release!知道为什么msbuild在上面的例子中不尊重PublishUrl属性吗?

PS:我尝试了不同的组合,包括删除'配置',使用'重建'和'发布'作为目标,并删除引号但没有任何成功。

提前致谢,

埃萨姆

4 个答案:

答案 0 :(得分:37)

您正在设置错误的属性。请尝试使用PublishDir。

您可以按原样将其传递给msBuild,也可以在项目文件中设置它(或者也可以是sln文件,不确定我总是使用项目文件。)这样

      <PropertyGroup>
    <PublishDir>C:\Dev\Release\$(BuildEnvironment)\</PublishDir>
  </PropertyGroup>

我刚刚在MsBuild and ClickOnce上写了一些博客文章,看看你应该“发现它们有用......”

祝你好运: - )

答案 1 :(得分:15)

某些功能由Visual-Studio完成,而不是由MSBuild脚本完成。因此,当从命令行执行时,单击一次部署的行为会有所不同。

  • 每次构建都不会增加ApplicationRevision。这仅适用于从Visual Studio
  • 中执行的操作
  • 在某些情况下,不使用PublishUrl。 Quote from MSDN
      

    例如,您可以将PublishURL设置为FTP路径,并将InstallURL设置为Web URL。在这种情况下,PublishURL仅在IDE中用于传输文件,但不在命令行构建中使用。最后,如果要发布ClickOnce应用程序,可以使用UpdateUrl,该应用程序从安装它的单独位置更新自身。

我已经创建了一个特殊的MSBuild文件来完成这些工作。它运行发布目标并将文件复制到正确的位置。

alhambraeidos要求的构建文件示例。它基本上运行常规VisualStudio-build,然后将click-once数据复制到真实版本文件夹。请注意,删除了一些项目特定的东西,所以它可能会被打破。此外,它不会增加构建数量。这是由我们的Continues-Build-Server完成的:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Publish" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <!-- the folder of the project to build -->
        <ProjLocation>..\YourProjectFolder</ProjLocation>
        <ProjLocationReleaseDir>$(ProjLocation)\bin\Release</ProjLocationReleaseDir>
        <ProjPublishLocation>$(ProjLocationReleaseDir)\app.publish</ProjPublishLocation>
        <!-- This is the web-folder, which provides the artefacts for click-once. After this
         build the project is actually deployed on the server -->
        <DeploymentFolder>D:\server\releases\</DeploymentFolder>
    </PropertyGroup>


    <Target Name="Publish" DependsOnTargets="Clean">
        <Message Text="Publish-Build started for build no $(ApplicationRevision)" />
        <MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Publish"/>   


        <ItemGroup>
            <SchoolPlannerSetupFiles Include="$(ProjPublishLocation)\*.*"/>
            <SchoolPlannerUpdateFiles Include="$(ProjPublishLocation)\Application Files\**\*.*"/>
        </ItemGroup>
        <Copy
            SourceFiles="@(SchoolPlannerSetupFiles)"
            DestinationFolder="$(DeploymentFolder)\"
        />
        <Copy
            SourceFiles="@(SchoolPlannerUpdateFiles)"
            DestinationFolder="$(DeploymentFolder)\Application Files\%(RecursiveDir)"
        />      
        <CallTarget Targets="RestoreLog"/>
    </Target>
    <Target Name="Clean">   
        <Message Text="Clean project:" />
        <MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Clean"/>
    </Target>       
</Project>

答案 2 :(得分:2)

我会花2美分,这种语法似乎有效(对或错):

/p:publishUrl="C:\\_\\Projects\\Samples\\artifacts\\Web\\"

答案 3 :(得分:0)

对我来说,灵魂是逃避这条路。

代替:

2019-11-22 10:04:32.878

输入:

2019-11-22 10:10:24.97