首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MSBuild不尊重我的ClickOnce应用程序的PublishUrl属性

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

Stack Overflow用户
提问于 2009-12-17 05:19:45
回答 4查看 24.7K关注 0票数 29

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

代码语言:javascript
代码运行次数:0
运行
复制
msbuild
    MyApp.sln
    /t:Publish
    /p:Configuration=Release
    /p:PublishUrl="C:\Apps\"
    /v:normal > Log.txt

(为便于阅读而包装)

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-17 10:54:41

有些特性是由Visual完成的,而不是由MSBuild-脚本完成的。因此,单击一次部署在从命令行执行时的行为有所不同。

  • ApplicationRevision并不是随着每次构建而增加的。这只在从Visual中执行时才能工作。
  • 在某些情况下,不使用PublishUrl。来自MSDN的报价:例如,您可以将PublishURL设置为FTP路径,并将InstallURL设置为Web。在这种情况下,PublishURL仅在IDE中用于传输文件,而不用于命令行构建。最后,如果您希望发布一个ClickOnce应用程序,该应用程序将从安装它的独立位置更新自身,则可以使用该应用程序。

我创建了一个特殊的MSBuild文件来完成这个任务。它运行发布目标,然后将文件复制到正确的位置。

根据alhambraeidos的请求,提供了构建文件的示例。它基本上运行常规的VisualStudio-构建,然后将单击一次的数据复制到真正的发布文件夹中。注意,它移除了一些特定于项目的东西,所以它可能坏了。此外,它并没有增加版本号。这是由我们的持续构建服务器完成的:

代码语言:javascript
代码运行次数:0
运行
复制
<?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>
票数 16
EN

Stack Overflow用户

发布于 2010-02-01 00:44:11

您设置了错误的属性。试一试PublishDir。

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

代码语言:javascript
代码运行次数:0
运行
复制
      <PropertyGroup>
    <PublishDir>C:\Dev\Release\$(BuildEnvironment)\</PublishDir>
  </PropertyGroup>

我刚刚写了几篇关于MsBuild和ClickOnce的博客文章,看看你会发现它们是有用的.

祝你好运:-)

票数 39
EN

Stack Overflow用户

发布于 2016-02-10 19:58:17

我要投入我的2分钱,这个语法似乎有效(对或错):

代码语言:javascript
代码运行次数:0
运行
复制
/p:publishUrl="C:\\_\\Projects\\Samples\\artifacts\\Web\\"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1919625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档