我正在尝试从 Wix 构建补丁 (msp)。
其中一个步骤指定我必须使用 Torch 任务来创建 wixmst。
我在 Wix.targets 中寻找火炬任务。该任务存在,但没有该任务的文档。
任何人都可以在他们的 Msbuild 脚本中使用火炬任务吗?如果是这样,请帮助我如何使用它?
我的目的是使用 torch task 创建 wixmst 文件。通过 exe 我们可以像下面那样做。
“torch.exe -p -xi 1.0\Product.wixpdb 1.1\Product.wixpdb -out Patch\Diff.Wixmst”
Run Code Online (Sandbox Code Playgroud) 使用 MSBuild,我如何根据构建配置复制文件,即构建配置是暂存还是发布。如果构建配置是暂存,我需要能够复制FolderA\FileA,而FolderB\FileB 用于生产。此外,复制时的文件应位于输出目录的根目录中,而不是位于“FolderA”或“FolderB”文件夹中。使用任务在项目加载期间抛出错误。
我正在使用 TFS2017 构建过程,并且在程序集版本控制方面遇到问题。我正在使用 dotnet 构建任务,命令设置为build,项目设置为**/*.sln,参数设置为--configuration $(BuildConfiguration) /p:Version=$(Build.BuildNumber)
查看 TFS 构建日志时,会执行正确的命令(见下文)
"C:\Program Files\dotnet\dotnet.exe" build C:\_agent\_work\13\s\*nameofsolution*.sln --configuration Release /p:Version=1100.1.0.0005
Run Code Online (Sandbox Code Playgroud)
但是,程序集的版本(文件版本和产品版本)显示为 1.0.0。
csproj 文件中没有<Version>元素。
当我作为构建代理用户在构建服务器上运行上述生成命令时,程序集的版本控制正确。我的 csproj 或解决方案属性中是否缺少某些内容?
我正在尝试将现有的 ASP.NET MVC Web 应用程序从 TeamCity 转移到 Azure DevOps,但是我似乎无法让我的管道找到它从 NuGet 包还原任务还原的包。
该解决方案有多个项目,并且它们使用了大量 NuGet 包。我创建了一个多步骤管道,目前有一个 NuGet 还原任务和一个 VS 构建任务。
解决方案结构是这样的:
\source
..\SolutionFolder
...Solution.sln
..\..\Project1
....Project1.csproj
..\..\Project2
....Project2.csproj
..\..\Packages
azure-pipelines.yaml
NuGet.config
Run Code Online (Sandbox Code Playgroud)
管道 YAML 如下所示:
trigger:
- PipelineBranch
pool:
vmImage: 'windows-latest'
stages:
## NuGet Restore ##
- stage: nuget_restore
displayName: 'Restore nuget packages'
jobs:
- job: nuget_package_restore
steps:
- task: NuGetCommand@2
displayName: 'NuGet restore'
inputs:
command: 'restore'
restoreSolution: 'source/SolutionFolder/Solution.sln'
feedsToUse: 'config'
nugetConfigPath: 'NuGet.Config'
restoreDirectory: '$(Build.SourcesDirectory)\source\SolutionFolder\packages'
## Build ##
- stage: build_for_int
displayName: 'Build …Run Code Online (Sandbox Code Playgroud) msbuild-task nuget-package-restore azure-devops azure-pipelines multistage-pipeline
我正在尝试将变量从一个目标输出到启动它的父目标.例如,
目标1只是调用文件2中的任务,并且应该能够使用其中的变量集.但是,我似乎无法让它工作(也许错误的语法?).目标1看起来像这样:
<Target Name="RetrieveParameter">
<MSBuild Projects="$(MSBuildProjectFile)" Targets="ObtainOutput" />
<Message Text="Output = $(OutputVar)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
目标2是它读取文本文件的值并将其设置为属性并将变量"OutputVar"设置为匹配的位置.这应该被返回给父母.
<Target Name="ObtainOutput" Outputs="$(OutputVar)">
<ReadLinesFromFile File="output.txt">
<Output TaskParameter="Lines"
PropertyName="OutputVar" />
</ReadLinesFromFile>
</Target>
Run Code Online (Sandbox Code Playgroud)
我对MSBuild任务很陌生,所以它很可能是显而易见的.我想要做的就是在一个任务中设置一个变量,然后在调用它的父任务中使用它.
在实现microsoft.build.utilities.task时如何访问构建的各种环境变量?
例如"TargetPath"
我知道我可以将其作为任务XML的一部分传递
<MyTask TargetPath="$(TargetPath)" />
Run Code Online (Sandbox Code Playgroud)
但是,如果我可以在代码中访问变量,我不想强迫任务的使用者必须这样做.
http://msdn.microsoft.com/en-us/library/microsoft.build.utilities.task.aspx
我有以下场景.我们使用存储过程来访问数据库,我们使用LiNQ 2 SQL生成类,或者我们使用Unplugged LINQ to SQL Generator.它已经作为自定义工具运行,但是对生成的类进行区分是一个巨大的痛苦.我们想自动生成类但是将它从版本控制中排除,所以我开始创建一个msbuild任务.发现这篇文章和这篇文章,但我不能自己解决这个问题.我添加了一些代码,任务如下所示:
public class GenerateDesignerDC : Task
{
public ITaskItem[] InputFiles { get; set; }
public ITaskItem[] OutputFiles { get; set; }
public override bool Execute()
{
var generatedFileNames = new List<string>();
foreach (var task in InputFiles)
{
string inputFileName = task.ItemSpec;
string outputFileName = Path.ChangeExtension(inputFileName, ".Designer.cs");
string result;
// Build code string
var generator = new ULinqCodeGenerator("CSharp");
string fileContent;
using (FileStream fs = File.OpenRead(inputFileName))
using (StreamReader rd = new …Run Code Online (Sandbox Code Playgroud) 我正在尝试在自定义msbuild文件中使用AspNetCompiler任务来预编译asp .net 4.0网站.但是,当我跑:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe custom.msbuild /t:PrecompileWeb
Run Code Online (Sandbox Code Playgroud)
它使用v2.0.50727 aspnet_compiler.有没有办法强制它使用v4.0.30319 aspnet_compiler?我问的原因是因为我收到了这个错误:
ASPCONFIG: Unrecognized configuration section system.web.extensions.
Run Code Online (Sandbox Code Playgroud)
但是,如果我跑:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -p .\My.Web.Site -f .\.PRECOMPILATION -v /
Run Code Online (Sandbox Code Playgroud)
它运行正常,这是有道理的,因为我在web.config中使用system.web.extensions而2.0 aspnet_compiler不知道那是什么.
昨天我问到有关AfterBuild工作的信息,并且能够通过将其放置在本Project节的最底部来进行工作:MSBuild AfterBuild步骤
我在另一个项目中尝试了完全相同的事情。这是我的BeforeBuild代码:
<Target Name="BeforeBuild">
<Message Text="###HI###" Importance="High" />
</Target>
Run Code Online (Sandbox Code Playgroud)
我Target Name="BeforeBuild"在该项目中没有其他人,并且将其放在本Project节的最底部。.vcxproj可以毫无问题地解析/加载到Visual Studio 2010中。我将“ MSBuild项目的生成输出/日志详细程度”设置为“正常”。
还有其他我没想到的事情会导致此问题无法执行吗?
我正在使用NuGet包MSBuild.ILMerge.Task将.NET外部dll组合到一个可执行文件中.它就像一个魅力.
现在,当我尝试在调试时进行编辑时,Visual Studio说:
如果尚未加载程序集,则不允许进行更改
我想这是将所有依赖项都放入单个.exe中的缺点(我不知道,这只是猜测).
但无论如何,MSBuild.ILMerge.Task在Build 上使用它是有意义的,但在Debug上是不活动的.有谁知道如何实现这一目标?
请注意,当MSBuild.ILMerge.Task通过NuGet安装时,当您点击"rebuild"时,它会自动创建单个.exe(当然,将.config文件放在外面,加上.pdb).您不需要配置任何东西,这就是为什么我无法猜测流程的内部工作原理以及如何将其取消激活.
有关更多信息,我正在写一篇关于ILMerge的博客文章.我想记录所有的方法,问题和警告:
http://localcode.wikidot.com/merge-all-binary-files-dll-s-etc-into-a-single-exe
Edit1:我注意到NuGet包会自动设置一个.props包含以下信息的文件:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Run Code Online (Sandbox Code Playgroud)
我已经开始寻找DefaultTargets="Build"和禁用调试的方法,我发现这篇文章似乎解释了如何.
EDIT2:
如果从我的.csproj中删除这一行,那么它会正确跳过ILMerge编译:
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props'))" />
<Error Condition="!Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets'))" />
</Target>
<Import Project="..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets" Condition="Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets')" />
Run Code Online (Sandbox Code Playgroud)
这是什么,但它看起来有点手工制作,目前还不切实际......
msbuild-task ×10
msbuild ×9
c# ×2
.net ×1
azure-devops ×1
c++ ×1
ilmerge ×1
msbuild-4.0 ×1
tfsbuild ×1
visual-c++ ×1
wix ×1
wix3.5 ×1