代码之家  ›  专栏  ›  技术社区  ›  TheBlueSky Matthias

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

  •  22
  • TheBlueSky Matthias  · 技术社区  · 15 年前

    我正在尝试创建一个批处理文件来发布我们在一次单击中拥有的少数ClickOnce应用程序。我使用的是msbuild,下面的命令行显示了我是如何做到的:

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

    (包装以便于阅读)

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

    PS:我还尝试了不同的组合,包括删除“configuration”,使用“rebuild”和“publishonly”作为目标,删除引号,但没有成功。

    事先谢谢,

    埃萨姆

    3 回复  |  直到 15 年前
        1
  •  15
  •   cristobalito    9 年前

    某些功能由Visual Studio完成,而不是由MSBuild脚本完成。因此,在从命令行执行click-once部署时,其行为不同。

    • applicationRevision不会随每次生成而增加。仅当从Visual Studio执行时,此操作才有效
    • 在某些情况下,不使用publishURL。 Quote from MSDN :

      例如,可以将publishurl设置为ftp路径,并将installurl设置为Web URL。在这种情况下,publishurl只在IDE中用于传输文件,而不在命令行构建中使用。最后,如果要发布一个ClickOnce应用程序,该应用程序从安装它的独立位置进行自我更新,则可以使用updateURL。

    我创建了一个特殊的msbuild文件,它可以执行这些操作。它运行发布目标,然后将文件复制到正确的位置。

    构建文件的示例,如Alhambraeidos所请求的。它基本上运行常规的VisualStudio Build,然后将Click Once数据复制到Real Release文件夹。请注意,删除了一些特定于项目的内容,因此它可能已损坏。此外,它不会增加内部版本号。这是由我们的继续构建服务器完成的:

    <?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
  •  37
  •   wallismark    15 年前

    您设置的属性不正确。改为尝试publishdir。

    您可以按原样将其传递到msbuild,也可以在项目文件中设置它(或者也可以在sln文件中设置,不确定我总是使用项目文件。)如下所示

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

    我刚刚写了几篇关于 MsBuild and ClickOnce 东西,看看你“应该”发现它们有用…

    祝你好运:-

        3
  •  2
  •   Reece Bradley    9 年前

    我把我的2美分放进去,这个语法似乎有效(对或错):

    /p:publishUrl="C:\\_\\Projects\\Samples\\artifacts\\Web\\"
    
    推荐文章