我当前正在发布2 ClickOnce应用程序。 VB中的一种,C#中的一种。我使用Azure DevOps进行构建和部署。我有2 * 2 = 4个版本:
我在有4个网站的IIS上进行部署。
这是当我在其中一个网站上安装我的一个应用程序的版本时的图片:
[帮助我确定在构建或发布之前和之后这些价值的真正来源。
首先在网页上:4、5和6。名称(4),版本(5)和发布者(6)被硬编码为单击一次部署的html文件。让我们忘记这些,专注于1、2、3。
但是,对我而言,最重要的是安装程序屏幕上的值:1、2和3。它们的名称(1),域(2)和发布者(3)来自何处?
我问这个问题,因为在我的VB构建中,所有内容似乎都是正确的,但是在C#构建中,我无法获得名称,发布者和域的正确值(1、2、3)。
我将DevOps和Visual Studio Build任务与MSBuild参数一起使用:
/target:publish
/p:ApplicationVersion=$(Build.BuildNumber)
/p:InstallURL=http://VBApp-staging.example.com/
/p:PublishURL=http://VBApp-staging.example.com/
/p:UpdateEnabled=true
/p:UpdateMode=Foreground
/p:ProductName="VB App Staging"
/p:OutputPath="$(build.ArtifactStagingDirectory)\Publish\\"
我还具有用于暂存和发布的sln和proj文件PropertyGroup设置。
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Staging|AnyCPU' ">
<PublishUrl>http://CSApp-staging.example.com/</PublishUrl>
<InstallUrl>http://CSApp-staging.example.com/</InstallUrl>
<ProductName>CS Application Staging</ProductName>
<PublisherName>Example Group</PublisherName>
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
VB和C#都定义了类似的PropertyGroup和类似的Devops管道。现在,当我为VB软件运行管道时,似乎可以读取的所有值(1、2、3)都是MSBuild重写参数中的值。但是对于我的CS软件,我不知道。看来MSbuild的论据无能为力,一切都来自我的项目定义。
这怎么可能?如何确定我的MSbuild参数有效。这些(1,2,3)的值来自哪里?
这怎么可能?如何确定我的MSbuild参数有效。这些(1,2,3)的值来自哪里?
Value1
来自msbuild属性PublisherName
,Value2
来自msbuild属性PublishUrl
。
如果这两个属性仅适用于您的VB项目而不适用于C#项目,则应检查C# project
的日志以确保您确实选择了Staging
+ AnyCPU
条目,该条目传递了相应的定义以进行发布过程。 >
对于Value3
,PublisherName
属性不是用于此目的的东西。没有VS默认选项可以控制它,要完成这项工作,我们需要使用SignTool添加自定义步骤。这是您可以遵循的一个similar issue和一个detailed document。感谢Arin
随时通知我是否有任何更新。