标签: msbuild-task

如何使用MSBuild'afterbuild'任务编辑.config文件?

我在目标项目中有一个.config,我需要通过MSBuild任务以编程方式添加一行.

Pseduo运营如:

  • 找到目标.config文件
  • 确定新节点的属性值(例如'package'节点的'id'和'version')
  • 在正确的父节点中插入新节点
  • 保存更改

$ TargetProjectDir\Config\packages.config中的.config文件:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ABC" version="1.1.0.4" />
  <package id="XYZ" version="2.0.0.0" />
</packages>
Run Code Online (Sandbox Code Playgroud)

之后需要看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ABC" version="1.1.0.4" />
  <package id="XYZ" version="2.0.0.0" />
  <package id="CarDataWidget" version="3.0.0.0" />
</packages>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经考虑过使用"内联任务","执行"任务和"XmlPoke"任务,但还没有设法让任何一个工作.

这是我对XmlPoke和XmlPeek的尝试:

我使用以下文章作为如何将节点添加到packages.config文件的灵感:http: //weblogs.asp.net/bsimser/appending-nodes-in-xml-files-with-xmlpeek-and-xmlpoke-使用-恶性

  <Target Name="AfterBuild" DependsOnTargets="AddPackage">
  </Target>
  <Target Name="AddPackage">
    <!-- Load existing nodes into a Property -->
    <XmlPeek XmlInputPath="config/packages.config" Query="/packages/package" >
      <Output TaskParameter="Result" PropertyName="Peeked" />
    </XmlPeek>
    <Message Text="From Peek: $(Peeked)"></Message>

    <!-- Load new node into Property -->
    <PropertyGroup> …
Run Code Online (Sandbox Code Playgroud)

msbuild msbuild-task xmlpoke

3
推荐指数
1
解决办法
1325
查看次数

调用可重用的 msbuild 目标时将列表项传递给 Properties

我正在尝试按照如何调用相同的 msbuild 目标两次?中概述的基本模型在 msbuild 中创建可重用的目标。

我试图传递一个我想解释为列表的属性。我在网上没有找到处理这种情况的例子。据我了解,问题在于 Properties 已经被视为列表项,因此它不喜欢传入列表项。有没有办法让 msbuild 在这里正确打包和解包列表?

Msbuild 抱怨:

error MSB4012: The expression "FilesToZip=@(Scripts)" cannot be used in this context. Item lists cannot be concatenated with other strings where an item list is expected. Use a semicolon to separate multiple item lists.
Run Code Online (Sandbox Code Playgroud)

这是一个调用者示例:

<Target Name="BuildMigrationZip">

   <MSBuild Projects="BuildZip.msbuild"
      Targets="BuildZip"
      Properties="FilesToZip=@(Scripts);OutputZipFile=$(MigrationPackageFilePath);OutputFolder=$(MigrationPackagePath);Flatten=true"/>

  <Message Text="Created database migration zip: $(MigrationPackageFilePath)" Importance="high"/>

</Target>
Run Code Online (Sandbox Code Playgroud)

和基本目标:

<Target Name="BuildZip">

  <MakeDir Directories="$(OutputFolder)"/>

  <Zip Files="@(FilesToZip)" 
  ZipFileName="$(OutputZipFile)"
  Flatten="$(Flatten)"
  ParallelCompression="false" />

</Target>
Run Code Online (Sandbox Code Playgroud)

我基本上正要回去剪切和粘贴这些内容,尽管我想在这里打包一些拉链。

更新:同样的问题适用于在可重用目标上设置输入。到目前为止,我的问题解决了原始功能,但保持依赖关系正常工作会很好。例如:

<Target Name="BuildZip"
   Inputs="@(FilesToZip)"
   Outputs="$(OutputZipFile)"> …
Run Code Online (Sandbox Code Playgroud)

msbuild msbuild-task msbuildcommunitytasks

3
推荐指数
1
解决办法
2799
查看次数

在VS2022中构建像素着色器项目

我有一个旧的类库项目,在以前版本的 Visual Studio (2017 IIRC) 中构建得很好。该项目包含一个基于 HLSL 的像素着色器,可生成径向颜色选择器。我刚刚将它移植到 VS2022,它不再构建,告诉我它找不到构建任务。这是错误消息:

无法从程序集 ShaderBuildTask 加载“ShaderBuildTask.PixelShaderCompile”任务,Version=1.0.3072.18169,Culture=neutral,PublicKeyToken=44e467d1687af125。无法加载文件或程序集“ShaderBuildTask,Version=1.0.3072.18169,Culture=neutral,PublicKeyToken=44e467d1687af125”或其依赖项之一。该系统找不到指定的文件。确认声明正确,程序集及其所有依赖项均可用,并且任务包含实现 Microsoft.Build.Framework.ITask.AngularGradientShaderEffect 的公共类

我已经ShaderBuildTaskSetup.msi在我的机器上安装了所需的着色器编译器 ( )。重新加载项目并重新启动 VS 也没有帮助。

有人在 VS2022 中使用像素着色器来看看我缺少什么吗?

hlsl msbuild-task visual-studio fragment-shader

3
推荐指数
1
解决办法
712
查看次数

CCNet电子邮件不包含MSBuild结果

我们正在使用CCNet 1.4.4.83但是当MSBuild任务失败时,我们不会在电子邮件通知中获得MSBuild结果(即丢失文件或编译失败的原因).

确实在CCNet网站(仪表板)上看到了构建失败.

我可以在artifacts文件夹中看到一个名为msbuild-results.xml的文件,因此msbuild任务看起来像是正确配置的.

看起来由于某种原因,在创建电子邮件通知时,但是在查看仪表板时,结果不会合并.

电子邮件任务位于publishers部分和标记之后.

我错过了什么?

email msbuild-task ccnet-config

2
推荐指数
1
解决办法
1170
查看次数

在MsBuild中声明动态配置文件路径

目前我正在尝试将文件复制到用户配置文件中的某个位置,但是在声明动态配置文件名称时遇到问题,例如:

<Target Name="CopyScript">
    <MsBuild Projects="JsProject.csproj" />
    <Copy SourceFiles="$(ProjectDir)\myScript.js" DestinationFolder="$(systemdrive)\Documents and Settings\$(userProfileName)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

声明动态用户配置文件名称的语法是什么?我是否必须从某个地方获取配置文件名称,或者是否有另一个MsBuild任务可以找到它?

谢谢.

msbuild msbuild-task

2
推荐指数
1
解决办法
1423
查看次数

如何使用MSBuild将文件复制到需要密码的网络共享?

我已经创建了一个MSBuild.xml文件来自动化我的ASP.NET项目构建.它构建项目,发布它,拉链并将zip复制到网络共享.如果我之前已经登录过网络文件夹,这一切都完美无缺.访问网络共享后,会记住用户名和密码,直到我退出计算机.如果我以前没有登录,则在运行构建文件时出现"失败:未知用户名或密码错误"错误.无论我以前是否访问过网络共享,我都希望构建工作始终有效.

目前我正在使用复制任务将zip文件复制到网络共享.我已经检查了复制任务文档,但我看不到任何包含凭据的方法.那么,如何将文件复制到网络共享传递所需的用户名和密码?

这是我正在使用的复制任务的示例.所有属性都在MSBuild.xml文件的顶部定义:

<Target Name="CopyToServer">
    <Copy SourceFiles="$(ReleaseFolder)\$(ZipFileName).zip" DestinationFolder="$(WebServerRoot)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

msbuild msbuild-task

2
推荐指数
1
解决办法
2480
查看次数

为什么MSBuild复制任务无法复制?

我正在尝试使用MSBuild Copy任务将由我的版本创建的二进制文件复制到某个文件夹。不幸的是,该过程无声地失败了。没有发出错误消息,也没有文件被复制。

这是我的.csproj文件的相关部分:

<Target Name="CopyFilesForModule" AfterTargets="AfterBuild">
  <CreateItem Include="bin\**\*.*" Exclude="bin\**\*.pdb;bin\**\*.xml">
    <Output TaskParameter="Include" ItemName="MySourceFiles" />
  </CreateItem>
  <Copy SourceFiles="$(MySourceFiles)" DestinationFolder="Areas\KoobooModule7\bin">
    <Output
          TaskParameter="CopiedFiles"
          ItemName="Changed" />
  </Copy>
  <Message Text="sourcefiles: @(MySourceFiles)" />
  <Message Text="changed:@(Changed)" Importance="high" />
</Target>
Run Code Online (Sandbox Code Playgroud)

如您所见,我已经添加了用于调试目的的消息。我使用以下命令行调用msbuild:

“ c:\ Program Files(x86)\ MSBuild \ 12.0 \ Bin \ MSBuild.exe” / t:rebuild / verbosity:d
iag KoobooModule7.csproj> buildlog.txt

这是我的构建日志中的相关摘录:

项目“ C:\ Users \ chris \ Documents \ Visual Studio 2013 \ Projects \ KoobooModule7 \ KoobooModule7 \ KoobooModule7.csproj”中的目标“ CopyFilesForModule:(TargetId:75)”(目标“生成”取决于它):
任务“ CreateItem”(TaskId:43)
  任务参数:Include = bin \ ** \ *。*(TaskId:43) …

msbuild copy msbuild-task

2
推荐指数
1
解决办法
1822
查看次数

MSBuild目标BeforeCompile,在加载项目文件时触发

这是一个与我的整体问题有关的较小问题。这就是我想要完成的。

我创建了一个修改我的源文件的任务。每当我编译和构建时,我都希望使用修改后的cs文件进行编译。香港专业教育学院试图做一个控制台应用程序,我从prebuild事件调用,但我发现只有一些修改的文件被编译。即使我没有在编辑器中打开它们。然后,我尝试在csproj文件中使用与以下xml一起使用的自定义任务:

<Target Name="BeforeCompile">
    <MyCustomTask />
</Target>
Run Code Online (Sandbox Code Playgroud)

而且我还用它来获得相同的结果:

<PropertyGroup>
    <CompileDependsOn>
        $(CompileDependsOn);
        MyCustomTarget;
    </CompileDependsOn>
</PropertyGroup>
<Target Name="MyCustomTarget">
    <MyCustomTask />
</Target>
Run Code Online (Sandbox Code Playgroud)

这样就可以完成我想做的事情,但是我发现,每当加载项目文件时,它都会触发我的目标。我认为这只会在编译我的代码时运行。因此很明显,它是在编译或加载项目文件时触发与编译相关的目标的。

理想情况下,我希望仅在我明确构建项目时(即,手动构建或开始调试时)才触发该目标。我可以做些什么来实现这一目标?

msbuild msbuild-task visual-studio-2010 visual-studio

2
推荐指数
1
解决办法
1595
查看次数

在构建过程后始终执行自定义 MSBuild 任务

我创建了一个在构建操作后执行的自定义任务。

<Target Name="AfterBuild" />
<Target Name="MyTarget"
        AfterTargets="AfterBuild">
  <MyTask ... />
</Target>
Run Code Online (Sandbox Code Playgroud)

问题:是否可以执行任务,如果构建操作被触发,但没有执行,因为项目中没有更改/不需要再次构建?

换句话说:我想总是在构建过程结束时执行任务,即使项目没有再次构建。

更新:使用AfterTargets="Build" 或设置属性<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>没有帮助。

第二次触发构建过程后,我只得到输出: Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped

msbuild msbuild-task visual-studio visual-studio-2015

2
推荐指数
1
解决办法
2526
查看次数

VS 2013中的构建后任务失败

在Visual Studio 2012中,我运行了以下Post-Build任务来编译和组合我的LESS文件:

$(MSBuildBinPath)\msbuild.exe "$(ProjectDir)MSBuildSettingsLess.xml"
Run Code Online (Sandbox Code Playgroud)

我的MSBuildSettingsLess.xml看起来像:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
    <Target Name="CompileDotlessCss">
        <ItemGroup>
            <Binaries Include="*.dll;*.exe"/>
        </ItemGroup>

        <!-- Compile dotLess CSS into minified full CSS -->
        <Exec Command="$(SolutionDir)..\Tools\dotless.compiler.exe $(ProjectDir)..\GMHC\Content\less\responsive.less $(ProjectDir)..\GMHC\Content\bootstrap-responsive.less.css"/>
        <Exec Command="$(SolutionDir)..\Tools\dotless.compiler.exe $(ProjectDir)..\GMHC\Content\less\bootstrap.less $(ProjectDir)..\GMHC\Content\bootstrap.less.css"/>
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2013中,失败并出现以下错误:

命令"C:\ Program Files(x86)\ MSBuild\12.0\bin\msbuild.exe"C:\ Users\Administrator\Documents\Projects\MedicalMissions\GMHC\MSBuildSettingsLess.xml退出,代码为9009.

输出窗口显示以下内容:

1>'C:\ Program'不被识别为内部或外部命令,
1>可操作程序或批处理文件.
1> C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(4429,5):错误MSB3073:命令"C:\ Program Files(x86)\ MSBuild\12.0\bin\msbuild.exe"C:\ Users\Administrator\Documents\Projects\MedicalMissions\GMHC\MSBuildSettingsLess.xml"

知道为什么失败或者如何走到最底层?

msbuild msbuild-task less visual-studio-2013

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