我有一个xUnit.net的自定义MSBuild任务.当任务运行时,如果我按Ctrl + C,它"尝试"取消任务,但当然失败(因为我的任务不支持取消).没有任何MSDN文档搜索或Google-fu已经获得解决方案.由于我找不到一个明显的接口来实现,我猜测可能通过一些约定来支持取消.
有没有人以前做过这个,知道取消工作需要什么?
在MSBuild任务中,您可以设置整体详细程度,但我真正想要做的是设置"复制"命令的详细程度.它为"正常"详细设置中复制的每个文件打印出一行,在我的例子中是数千条过于细致的行.
我没有在Copy任务上看到任何关于这样一个属性的文档,所以我想知道是否有另一种方式......或者如果人们放弃了内置的复制任务并使用robocopy和他们自己的标志.
我试图转换我所拥有的项目中的所有web.config文件,这是我的树结构:
还有更多的web.config文件,但我们的想法是,它会找到所有这些文件并对它们应用相同的配置转换.
我从我发现的博客文章中得到了一些提示,但是我在最后一步,即实际的转变中陷入困境.中间还有一些我不喜欢的粗略部分(我不太明白我在做什么,我显然做错了).这是我到目前为止的地方:
<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml" AssemblyFile="Tools\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<SitePath>..\..\Website</SitePath>
<WebConfigTransformInputFile>$(SitePath)\Web.config</WebConfigTransformInputFile>
<WebConfigTransformFile>Web.Transform.config</WebConfigTransformFile>
<OutDir>..\N\N\</OutDir>
</PropertyGroup>
<ItemGroup>
<_FilesToTransform Include="$(SitePath)\**\web.config"/>
</ItemGroup>
<Target Name="Transform">
<MakeDir Directories="@(_FilesToTransform->'$(OutDir)%(RelativeDir)')" />
<TransformXml Source="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')"
Transform="$(WebConfigTransformFile)"
Destination="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
我的Transform.bat看起来像这样:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj
Run Code Online (Sandbox Code Playgroud)
因此,当我调用批处理时,会创建相应的目录.然而,正如你所看到的,我必须对OutDir有点创意,使它成为..\N\N.出于某种原因,如果我不这样做,OutDir路径将与输入目录完全相同.所以我显然需要在MakeDir中改变一些东西,但我不确定是什么.
真正的问题出现在它开始进行变换时.我试图保持TransformXml Source参数像这样或类似:
@(_FilesToTransformNotAppConfig->'%(FullPath)')
Run Code Online (Sandbox Code Playgroud)
后者给我一个错误"无法打开源文件:不支持给定路径的格式." 而前者给了我这个输出:
Build started 30-4-2012 14:02:48.
Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" on node 1 (default targets).
Transform:
Creating directory "..\N\N\..\..\Website\Views\".
Transforming Source File: ..\N\N\..\..\Website\Views\Web.config;..\N\N\..\..\Website\Web.config
D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj(32,2): error : Could not open Source file: Could not …Run Code Online (Sandbox Code Playgroud) 有没有办法使用以空格结尾的值作为XmlPoke值?当我执行任务时,值被替换但最后没有空格.
再生产:
test.targets:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<Copy SourceFiles="test.xml" DestinationFiles="output.xml"/>
<XmlPoke Query="/root/element/@attr[.='replaceme']|/root/replaceme" Value="X " XmlInputPath="output.xml"/>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
的test.xml:
<root>
<element attr="replaceme" />
<replaceme/>
</root>
Run Code Online (Sandbox Code Playgroud)
当我跑:
MSBuild /v:detailed test.targets
Run Code Online (Sandbox Code Playgroud)
我得到output.xml没有空格:
<root>
<element attr="X" />
<replaceme>X</replaceme>
</root>
Run Code Online (Sandbox Code Playgroud)
有没有办法强制XmlPoke设置正确的值(末尾有空格)?
我有一个 C# 库项目,它具有一些使用 PowerShell 在“BeforeBuild”中创建的依赖项。
MSBuild 似乎每次都会执行目标“BeforeBuild”,即使库项目本身不需要构建也是如此。
我想将构建过程配置为仅在库需要(重新)构建时运行 PowerShell 脚本。
有没有办法做到这一点?
我尝试使用目标“BeforeBuild”和“BeforeCompile”。但似乎每次都会执行。
我有一个我想要复制到多个位置的目录.
说我有
我想把它复制到
所以我有两个问题:
我有一个类似这样的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社区任务删除web.config中的节点.我可以使用XmlUpdate任务更新节点,但我无法删除节点.有任何想法吗.
我有一个包含大量相关.csproj文件的解决方案.
每个.csproj文件都有一个<Target Name="PublishQA">....
当我尝试编译整个解决方案时,构建失败:
> msbuild mysolution.sln /t:PublishQA`
"c:\myproj.sln" (publishqa target) (1) ->
c:\myproj.sln.metaproj : error MSB4057: The target "PublishQA" does not exist in the project. [c:\myproj.sln]
Run Code Online (Sandbox Code Playgroud)
当我.csproj直接构建项目时,它构建得很好.
如何告诉msbuild将目标传递给项目文件???
我不知道是否 ItemGroup使用正确的类型.根据选择,我会得到4种不同的布尔值,无论是真还是假.
我想填补一个 ItemGroup根据真假这个"字符串".这可能或我应该使用什么?
例
Anders = true
Peter = false
Michael = false
Gustaf = true
Run Code Online (Sandbox Code Playgroud)
我的 ItemGroup然后应该有安德斯和古斯塔夫.
这是可能的,或者我该如何解决?
msbuild msbuild-task msbuildcommunitytasks msbuild-4.0 msbuildextensionpack
msbuild ×10
msbuild-task ×10
c# ×1
copy ×1
msbuild-4.0 ×1
silverlight ×1
slowcheetah ×1
xmlpoke ×1
xpath ×1