我在TFS中有几个分支(开发,测试,阶段),当我将更改合并到测试分支时,我希望自动构建和部署脚本找到所有更新的SQL文件并将它们部署到测试数据库.
我以为我可以通过查找自上一次良好构建以来与构建相关联的所有变更集,查找变更集中的所有sql文件并部署它们来实现此目的.但是我似乎没有因为某种原因而将变更集与构建相关联,所以我的问题是双重的:
1)如何确保变更集与特定构建相关联?
2)如何获得自上一次良好构建以来分支中已更改的文件列表?我有最后一个成功构建的构建但我不确定如何在不检查更改集的情况下获取文件(如上所述,它与构建无关!)
我有一个我想要复制到多个位置的目录.
说我有
我想把它复制到
所以我有两个问题:
作为包含许多项目的解决方案的一部分,我有一个引用的项目(通过<ProjectReference>解决方案中的其他三个项目,以及其他一些项目).在AfterBuild,我需要将3个特定依赖项目的输出复制到另一个位置.
通过各种SO答案等,我决定实现这一目标的方式是:
<MSBuild
Projects="@(ProjectReference)"
Targets="Build"
BuildInParallel="true"
Condition="'%(Name)'=='ProjectA' OR '%(Name)'=='ProjectB' OR '%(Name)'=='ProjectC'">
<Output TaskParameter="TargetOutputs" ItemName="DependentAssemblies" />
</MSBuild>
<Copy SourceFiles="@(DependentAssemblies)" DestinationFolder="XX" SkipUnchangedFiles="true" />
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了这个问题.该<MSBuild步骤的IncrementalClean任务最终删除了一些输出ProjectC.在VS2008下运行时,如果项目包含此目标,如果我对整个解决方案进行构建,那么build.force存放在obj/DebugProjectC文件夹中的文件将触发ProjectC重建AfterBuild,如果从构建中排除此项目,则[正确] ]不会触发ProjectC的重建(并且重要的是重建ProjectC的所有家属).在这种情况下,这可能是VS特定的技巧,这不会发生在TeamBuild或其他命令行MSBuild调用的上下文中(但最常见的用法是通过VS,所以我需要解决这个问题)
依赖项目(以及一般的解决方案的其余部分)都是与VS交互式创建的,因此ProjectRefences包含相对路径等.我已经看到提到这可能会导致问题 - 但没有完整解释为什么,或者它将被修复或如何解决它.换句话说,我真的不感兴趣,例如ProjectReference通过手动编辑.csproj 将路径转换为绝对路径.
虽然我完全有可能做一些愚蠢的事情,有人会立即指出它是什么(这将是伟大的),请放心,我花了很多时间仔细考虑/v:diag输出等(虽然我没有尝试建立一个repro从从头开始 - 这是在相对复杂的整体构建的背景下)
我有一个类似这样的Silverlight 3项目:
<ItemGroup>
<Content Include="Content\image1.png">
</Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
基本上我已经将PNG文件添加到我的项目中,并将其构建操作设置为"内容".这很好用.
现在我想做的是能够以不同的格式将图像添加到我的项目中,并在构建时将它们转换为PNG - 这样最终结果就好像我已经将PNG图像添加到项目中一样(作为内容)首先.
换句话说 - 我希望图像以PNG格式显示在我的XAP包中.
理想情况下,我希望这样做,它将与Visual Web Developer 2008 Express一起使用(因此我可以通过将图像文件拖入IDE并可能更改其构建操作来将图像文件添加到我的项目中),而无需制作任何系统全面的变化.
我想要转换的特定格式是XCF - 我已经有.NET代码来转换为PNG.我假设我必须创建一个MSBuild任务.
我没有太多的MSBuild经验,我想知道如何把这样的东西放在一起.
基于我对MSBuild如何工作的粗略理解,我认为我需要知道:
@(Content)根据文件扩展名(重新)从(或其他)集合中移动它们来创建项目集合?
Task?Task?BeforeBuild?)以及如何将转换后的项目重新注入@(Content)?(或者我应该使用其他一些系列?)
如果这似乎是一种合理的做事方式,或者我错过了什么?
您能否指导我如何使用MSBuild脚本运行MSTest单元测试.
结合IVY + msbuild,哪种方法很有效?
我们的目标是将IVY集成到C#/ C++构建过程中,以进行依赖项解析和发布.我们尝试在构建的开始和结束时将它添加到自定义任务中,我们尝试使用ant + apache-ant-dotnet包装msbuild调用.
其他选项可能是gradle,buildr,rake.
你用什么?
谢谢
彼得
我有一个文本文件,其中包含我要复制到临时目录的文件的某些位置
---- List.txt ----
Build\Java
Build\Classes
Run Code Online (Sandbox Code Playgroud)
现在,我将此列表提取到一个Item中
<ReadLinesFromFile File="List.txt" >
<Output TaskParameter="Lines"
ItemName="DirectoryList" />
</ReadLinesFromFile>
Run Code Online (Sandbox Code Playgroud)
现在,为了追加完整路径并添加一些排除,我再次将其存储到另一个ItemGroup中:
<ItemGroup>
<PackageList Include="$(BuildPath)\%(DirectoryList.Identity)\**\*.*"
Exclude="$(BuildPath)\%(DirectoryList.Identity)\**\*.pdb" />
</ItemGroup>
<Copy SourceFiles="@(PackageList)"
DestinationFiles="@(PackageList->'$(PackageTemp)\%(SourceDirectory)\%(DirInPackage)%(RecursiveDir)%(Filename)%(Extension)')" />
Run Code Online (Sandbox Code Playgroud)
问题:
实际目录 -
C:\Work\Build\Java\Debug
C:\Work\Build\Java\Release
C:\Work\Build\Classes\*.class
Run Code Online (Sandbox Code Playgroud)
O/p中的内容
C:\temp\Debug
C:\temp\Release
C:\temp\*.class
Run Code Online (Sandbox Code Playgroud)
如何让它复制相应的" Java"和" Classes"文件夹呢?
我们遇到了将MSBuild与PsExec集成的问题.在我们的场景中,我们在msbuild构建文件中运行PsExec.PsExec命令在远程服务器上运行另一个MSBuild文件,以执行我们希望在其中看到其输出的任务.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
....
<Exec
Command="$(PsExecPath) \\$(RemoteIP) -u $(Username) -p $(Password) -w $(RemoteWorkingDir) msbuild.exe fullbuild.xml /t:Release" >
</Exec>
Run Code Online (Sandbox Code Playgroud)
它工作正常,它不会挂起,但远程msbuild命令的输出没有出现在控制台上.当我直接从命令行运行psexec时,它工作正常,远程构建输出显示在屏幕上.
我们正在使用PsExec 2.11和MSBuild 4.0.我在这里错过了什么?
我有以下设置(为了简洁,删除了无趣的XML):
MyProject.fsproj
<Project ...>
<Import Project="MyTask.props" />
...
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
MyTask.props
<Project ...>
<UsingTask XXX.UpdateAssemblyInfo />
<Target Name="UpdateAssemblyInfo"
BeforeTargets="CoreCompile">
<UpdateAssemblyInfo ...>
<Output
TaskParameter="AssemblyInfoTempFilePath"
PropertyName="AssemblyInfoTempFilePath" />
</UpdateAssemblyInfo>
<ItemGroup>
<Compile Include="$(AssemblyInfoTempFilePath)" />
</ItemGroup>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
问题在于MyTask.props添加的ItemGroup是最后添加的,尽管它是在项目的最开始时导入的.我假设这是因为ItemGroup实际上并未导入 - 它是在运行任务时添加的.
这在F#中不是一件好事,因为文件顺序很重要 - 包括构建列表末尾的文件意味着构建EXE是不可能的(例如,入口点必须在最后一个文件中).
因此我的问题是 - 有没有办法让我输出一个ItemGroup作为Target的一部分,并将生成的ItemGroup作为第一个?
我想在我的TFS 2015上上传一些可在此处获得的构建任务https://github.com/Microsoft/vso-agent-tasks.我确实遇到某个任务的问题,因为他们确实需要最低代理版本1.89.0.我的构建代理是1.83.2版本.现在,问题是,如何更新给定池的代理?如果我右键单击TFS上的代理池并选择"更新所有代理"选项,则不会执行任何操作.我想因为TFS上可用的最新版本的代理是1.83.2.我在哪里可以找到它的最新版本以及如何更新它?
注意我在TFS 2015上工作,而不是VSO.
谢谢
msbuild-task ×10
msbuild ×9
copy ×2
tfs ×2
.net ×1
ant ×1
build ×1
f# ×1
ivy ×1
msbuild-4.0 ×1
mstest ×1
psexec ×1
silverlight ×1
tfs-2015 ×1