标签: msbuild-task

如何编写MSBuild任务来支持取消?

我有一个xUnit.net的自定义MSBuild任务.当任务运行时,如果我按Ctrl + C,它"尝试"取消任务,但当然失败(因为我的任务不支持取消).没有任何MSDN文档搜索或Google-fu已经获得解决方案.由于我找不到一个明显的接口来实现,我猜测可能通过一些约定来支持取消.

有没有人以前做过这个,知道取消工作需要什么?

msbuild msbuild-task

8
推荐指数
1
解决办法
1192
查看次数

MSBuild复制命令的详细程度

在MSBuild任务中,您可以设置整体详细程度,但我真正想要做的是设置"复制"命令的详细程度.它为"正常"详细设置中复制的每个文件打印出一行,在我的例子中是数千条过于细致的行.

我没有在Copy任务上看到任何关于这样一个属性的文档,所以我想知道是否有另一种方式......或者如果人们放弃了内置的复制任务并使用robocopy和他们自己的标志.

msbuild msbuild-task

8
推荐指数
1
解决办法
1727
查看次数

如何让msbuild任务对一组文件进行配置转换?

我试图转换我所拥有的项目中的所有web.config文件,这是我的树结构:

  • Transform.bat
  • 变换
    • ConfigTransform.proj
    • Web.Transform.config
  • 网站
    • web.config中
    • 查看
      • 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)

msbuild msbuild-task web-config-transform slowcheetah

8
推荐指数
1
解决办法
9079
查看次数

XmlPoke任务修剪值

有没有办法使用以空格结尾的值作为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# msbuild xpath msbuild-task xmlpoke

8
推荐指数
1
解决办法
117
查看次数

如何在编译之前但仅在编译发生时运行 MSBuild Target

我有一个 C# 库项目,它具有一些使用 PowerShell 在“BeforeBuild”中创建的依赖项。

MSBuild 似乎每次都会执行目标“BeforeBuild”,即使库项目本身不需要构建也是如此。

我想将构建过程配置为仅在库需要(重新)构建时运行 PowerShell 脚本。

有没有办法做到这一点?

我尝试使用目标“BeforeBuild”和“BeforeCompile”。但似乎每次都会执行。

msbuild msbuild-task visual-studio incremental-build

8
推荐指数
1
解决办法
4978
查看次数

Msbuild根据目标参数列表复制到多个位置?

我有一个我想要复制到多个位置的目录.

说我有

  • home.aspx

我想把它复制到

  • ABC/home.aspx
  • 高清/ home.aspx
  • GHI/home.aspx

所以我有两个问题:

  • 如何定义列表abc,def,ghi?
  • 如何使用此列表的每个元素执行我的复制任务?

msbuild copy msbuild-task msbuild-propertygroup

7
推荐指数
1
解决办法
4395
查看次数

MSBuild:如何在构建时创建和使用任务来转换内容项?

我有一个类似这样的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)根据文件扩展名(重新)从(或其他)集合中移动它们来创建项目集合?
    • 或者:创建我可以在Visual Web Developer 2008 Express中使用的自定义构建操作
  • 如何接收输入项的路径Task
  • 哪里(.NET或MSBuild?)和如何指定生成的输出文件的位置Task
  • 如果文件的输入文件发生变化,如何确保重建文件?
  • 在哪里(可能BeforeBuild?)以及如何将转换后的项目重新注入@(Content)?(或者我应该使用其他一些系列?)
    • 或者:将其纳入XAP的其他方式?

如果这似乎是一种合理的做事方式,或者我错过了什么?

msbuild silverlight msbuild-task visual-studio

7
推荐指数
1
解决办法
2436
查看次数

msbuild xmlupdate在web.config中删除节点

如何使用MSBuild社区任务删除web.config中的节点.我可以使用XmlUpdate任务更新节点,但我无法删除节点.有任何想法吗.

msbuild msbuild-task

7
推荐指数
1
解决办法
2910
查看次数

将自定义msbuild目标从Solution传递给Project

我有一个包含大量相关.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将目标传递给项目文件???

msbuild msbuild-task msbuild-target

7
推荐指数
1
解决办法
1543
查看次数

具有条件的MSBuild ItemGroup

我不知道是否 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

7
推荐指数
1
解决办法
8567
查看次数