我编写了一个应用程序及其WiX安装程序,并使用subversion将其置于版本控制之下.当WiX安装程序构建时,我希望其版本号是应用程序的当前构建版本.我该如何做到这一点?我使用c#来编写应用程序代码.
NB我正在使用ccnet来构建这个项目
我想在wix项目生成的msi文件的文件名中包含一些动态部分.这个动态部分应该由变量控制,这些变量是我的wix项目的一部分,并且声明如下:
<?define ProductVersion="7.1.0.1" ?>
Run Code Online (Sandbox Code Playgroud)
有没有人知道将wix变量的值发送给链接器以将其用作输出文件名的一部分的方法?
顺便说一下:我正在使用Wix3
我正在尝试配置WiX设置和库,以便将库中某个文件的版本用作设置中的Product/@ Version.
背景
在本地定义文件的设置中,这是相对简单的,假设组件项目由WiX项目引用然后配置:
<Component Id="Company.Assembly" Guid="[GUID]">
<File Id="Company.AssemblyFile"
Name="Company.Assembly.dll" KeyPath="yes"
DiskId="1"
Source="$(var.Company.Assembly.TargetPath)" />
</Component>
Run Code Online (Sandbox Code Playgroud)
然后可以将产品版本设置为
<Product Id="[GUID]"
Name="Product Name"
Language="1033"
Version="!(bind.FileVersion.$(var.Company.AssemblyFile
.TargetFileName))"
Manufacturer="Company Name"
UpgradeCode="[GUID]">
Run Code Online (Sandbox Code Playgroud)
问题
因此,将所有组件移动到WiX库项目后,就不再可能直接引用该!(bind.FileVersion.$(var.Company.AssemblyFile.TargetFileName))变量.
我已经尝试在库中配置WixVariable
WixVariable Id="BuildVersion" Value="!(bind.FileVersion.Company.AssemblyFile)"/>
Run Code Online (Sandbox Code Playgroud)
然后从设置中引用它
<Product Id="[GUID]"
Name="Product Name"
Language="1033"
Version="!(wix.BuildVersion)"
Manufacturer="Company Name"
UpgradeCode="[GUID]">
Run Code Online (Sandbox Code Playgroud)
没有成功.
库或设置中是否需要一些额外的步骤或语法才能从设置中访问WixVariable(或某些派生)?
如何根据哪个Visual Studio配置处于活动状态来定义更改的Wix属性和值?例如,对于我们的发布版本,var x = 1,对于导出构建,var x = 2.
我想创建/通过Visual Studio生成过程中推动NuGet包的解释在这里.
建筑包很容易:
<Exec WorkingDirectory="$(ProjectDir)" Command="$(NuGetApp) pack $(ProjectFile) -OutputDirectory $(Deploy) -Verbose -Prop Configuration=Release"/>
Run Code Online (Sandbox Code Playgroud)
我在$(Deploy)文件夹中看到.nupkg文件.
但是为了能够推动它,我需要$(AssemblyVersion)来使用它:
<Exec Command="$(NuGetApp) push $(ProjectName)$(AssemblyVersion) -s $(NugetServer) $(NugetKey)" />
Run Code Online (Sandbox Code Playgroud)
我尝试使用XMLRead来获取值,但NugetSpecFile中的值是"$ version $"而不是AssemblyInfo.cs中的版本.
<XmlRead XPath="/package/metadata/version" XmlFileName="$(NuSpecFile)">
<Output TaskParameter="Value" PropertyName="AssemblyVersion" />
</XmlRead>
Run Code Online (Sandbox Code Playgroud)
如何访问版本,以便在"nuget push"中使用它?
我正在使用Msbuild来编译和生成.zip文件和安装程序,我需要我的assembyInfo的版本号.
我正在使用此代码.
<Target Name="getversion">
<GetAssemblyIdentity AssemblyFiles="$(BuildDir)\myprogram.exe">
<Output TaskParameter="Assemblies" ItemName="fooAssemblyInfo"/>
</GetAssemblyIdentity>
<Message Text="Version = %(fooAssemblyInfo.Version)"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
但这会返回Version = 2.0.0.29110,我只需要次要和主要版本.
有没有办法在没有自定义任务的情况下读取assembyInfo.cs信息?
我目前有一个web.api项目的解决方案,我希望将其部署到本地IIS中的不同虚拟目录.目前我在api的.csproj中执行以下操作:
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)' == 'CustomerOne.Debug'">
<CustomerName>CustomerOne</CustomerName>
....
</PropertyGroup>
...
Run Code Online (Sandbox Code Playgroud)
通过引用它们,可以进一步广泛地使用这些变量进行web.config转换,复制到不同的位置等$(CustomerName).
唯一不起作用的地方是虚拟目录的定义,即我想将构建配置连接到IISUrl下面,你可以硬编码:
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
...
<IISUrl>http://localhost/api/something</IISUrl>
...
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
Run Code Online (Sandbox Code Playgroud)
替换<IISUrl>http://localhost/api/$(CustomerName)</IISUrl>它不起作用.想法?
我是 WiX 的新手,在实现我认为应该非常简单的事情时遇到了一些困难。我在 Visual Studio 2013 中使用 WiX v3.8。总的来说,我想要实现的目标是拥有一个可以更改安装程序版本的地方,并且这将在整个 WiX 项目中传播。
在 WiX 项目的项目属性 =>“构建”选项卡 =>“定义预处理器变量”文本框中,我有:
ProjectVersion=3.6.7.0
但是,当失败时,我遇到问题的是构建后事件:
copy !(TargetPath) "C:\Development\Release Builds\MyProject\$(TargetName) $(var.ProjectVersion)$(TargetExt)"
我一直在互联网上搜索,但无法找到解决我的问题的方法。也许我只是不知道该问什么?
我的问题是:如何使这个构建后活动正常进行?我究竟做错了什么?我想做的就是能够轻松更改 ProjectVersion 变量或构建后事件中的另一个此类变量。