我在Visual Studio 2015中有一个使用几个NuGet包的解决方案.当我在Visual Studio 2015中构建时,正确地还原了包并且构建成功.但是,当我将同一个项目推送到Visual Studio Online时,即使我选中了"Restore NuGet Packages",构建也会失败,因为MSBuild无法找到引用的二进制文件.
我查看了构建日志,看到我的软件包都已恢复.为什么,即使包恢复,是在构建期间找不到引用的二进制文件?
鉴于此Itemgroup:
<ItemGroup>
<Foo Include="First">
<Value>1</Value>
</Foo>
<Foo Include="Second">
<Value>2</Value>
</Foo>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
如何获取Value第二项(2)的元数据?我在想:
<Message Text="%(Foo.Value)" Condition="'' == 'Second'" />
Run Code Online (Sandbox Code Playgroud)
但我不知道如何编写Condition属性.
谢谢!
因为我有几个构建共享一些包含公共构建任务的程序集,所以我有一个TFSBuild.proj用于所有构建并根据构建导入不同的目标,如下所示:
<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<Import Project="Build_1.targets" Condition="'$(BuildDefinition)'=='Build_1'" />
<Import Project="Build_2.targets" Condition="'$(BuildDefinition)'=='Build_2'" />
<Import Project="Build_3.targets" Condition="'$(BuildDefinition)'=='Build_3'" />
</Project>
Run Code Online (Sandbox Code Playgroud)
特定构建的每个目标都具有构建类型文件的常用内容,但在我的情况下,我还引用了在源代码管理中与TFSBuild.proj相同的文件夹中的一些任务.我想添加文件夹以包含一些测试构建目标,因为我的文件夹变得有点杂乱.以下说明了我的意思.
$(TFS project)\build\
TFSBuild.proj
Build_1.targets
...
Assembly1.dll
Assembly2.dll
...
Folder\
Test_target_1.targets
....
Run Code Online (Sandbox Code Playgroud)
但是,当我说明我的构建时,我发现Test_target_1.targets和Folder中的其他文件没有被复制到构建目录,而TFSBuild.proj和根级别的其他文件,就像它们的构建类型文件夹一样.被复制.这导致我的测试版本无法引用Folder中的文件,导致我的构建立即失败.换一种说法,
$(TFS project)\build\
TFSBuild.proj
Build_1.targets
...
Assembly1.dll
Assembly2.dll
...
Folder\
(nothing here)
Run Code Online (Sandbox Code Playgroud)
我意识到最简单的解决方法是摆脱文件夹并将其所有内容移动到构建文件夹,但我真的想拥有文件夹,如果可能的话.感谢您的帮助.
我想创建一个任意字符串/名称的"ItemGroup",以便使用MSBuild转换,例如:
<ItemGroup>
<Categories>First</Categories>
<Categories>Second</Categories>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
然后,我希望将这些类别的转换传递到控制台应用程序,例如:
/c @(Categories, ' /c ')
Run Code Online (Sandbox Code Playgroud)
我在引号中说"ItemGroup"的原因是因为我不确定它是否适用于我以这种方式使用ItemGroups - 据我所知,文档中没有任何内容表明ItemGroups 必须是文件,但由于缺少必需的"包含"属性,因此在错误消息中使用上述结果.
我被赋予了为我们的小型.Net商店研究和实施CI的任务.在进行研究之后,我们选择了TeamCity进行自动化构建.安装TeamCity和MSBuild非常简单,但问题是我开始构建时.我总会得到一个错误.从事物的外观来看,它正试图调用共享库项目,所以我做的第一件事是编辑VCS以包含共享库,但这并没有解决问题.
请查看构建中的日志,如果需要通过TeamCity或VS 2008配置MSBuild,请告诉我们?
[09:32:29]: Checking for changes
[09:32:31]: Clearing temporary directory: C:\Program Files\TeamCity\BuildAgent\temp\buildTmp
[09:32:31]: Checkout directory: C:\Program Files\TeamCity\BuildAgent\work\18eca7a0915880c3
[09:32:31]: Updating sources: server side checkout... (3s)
[09:32:31]: [Updating sources: server side checkout...] Building incremental patch for VCS root: Shared Libraries
[09:32:33]: [Updating sources: server side checkout...] Building incremental patch for VCS root: My TFS Two
[09:32:35]: [Updating sources: server side checkout...] Repository sources transferred
[09:32:35]: Project "Apollo.sln.teamcity.patch.tcprojx" (TeamCity_Generated_Build
target(s)):
[09:32:36]: [Project "Apollo.sln.teamcity.patch.tcprojx" (TeamCity_Generated_Build target(s)):] ..\..\..\Shared Libraries\Local.Data\v2\Local.Data.csproj warning MSB4122: Scanning project dependencies …Run Code Online (Sandbox Code Playgroud) 目前我们使用nant,ccnet(巡航),svn,Nant.我使用msbuild来做我的sln构建只是因为它更容易出壳.
将我的整个构建脚本切换到MSBuild有什么好处吗?
我需要能够运行单元测试,部署.这更容易吗?
我正在根据项目A创建项目B,并希望将所有A的元数据复制到B(并添加一些额外的元数据).
<ItemGroup>
<B Include="@A">
<M1>%(A.M1)</M1>
<M2>%(A.M2)</M2>
<M3>%(A.M3)</M3>
...
<M100>%(A.M100)</M100>
... Additional metadata specific to B ...
</B>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
而不是将每个元数据M1-M100从A单独复制到B,是否可以告诉msbuild将所有元数据从A复制到B?
这样的"批量元数据副本"能否受到限制?
就像是:
<ItemGroup>
<B Include="@A">
... Additional metadata specific to B ...
</B>
</ItemGroup>
<CopyMetadata From="@A" To="@B" Condition="... Check something ..."/>
Run Code Online (Sandbox Code Playgroud)
谢谢.
请提供基本步骤如何编写msbuild脚本来自动化svn服务器中托管的asp.net网站项目的构建过程.(将做标签等)
我有一个小问题.我试图将Jenkins项目从一台机器复制到另一台机器(部分用于学习Jenkins).在源机器上我安装了Jenkins MSBuild插件,在目标上我没有.我已经在目标机器上安装了插件,但缺少了一些东西.在源计算机上,我有选项"使用MSBuild构建Visual Studio项目或解决方案",然后在"MSBuild版本"下拉列表中我有两个选项"(默认)"和".NET版本4(64位)".在目标机器上我只有"(默认)".有谁知道我如何得到额外的选择?
谢谢,
萨钦
我正在寻找MSBuild.Extensionpack.Compression.Zip添加自定义构建步骤,我想将一些文件添加到现有的.zip存档中.
<ItemGroup>
<Files Include="$(MSBuildProjectDirectory)\SomeFolder\AnotherFolder\*.xml">
</Files>
</ItemGroup>
<Message Text="@(Files)"></Message>
<MSBuild.ExtensionPack.Compression.Zip TaskAction="AddFiles"
CompressFiles="@(Files)" ZipFileName="$(MyZipArchive)"/>
Run Code Online (Sandbox Code Playgroud)
运行此文件时,文件确实已添加到zip存档中,但不会添加到根目录中.相反,它会创建一个与我的项目路径相对应的文件层次结构
Projects/MyProject/SomeFolder/AnotherFolder/myfile.xml
Run Code Online (Sandbox Code Playgroud)
有关如何获取myfile.xml.zip存档根目录的任何想法?