问题标签 [msbuild-task]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tfs - 以编程方式查找自上次良好构建以来的 TFS 更改
我在 TFS 中有几个分支(开发、测试、阶段),当我将更改合并到测试分支中时,我希望自动构建和部署脚本找到所有更新的 SQL 文件并将它们部署到测试数据库。
我想我可以通过查找自上次良好构建以来与构建相关的所有变更集,找到变更集中的所有 sql 文件并部署它们来做到这一点。但是,由于某种原因,我似乎没有与构建相关的变更集,所以我的问题是双重的:
1) 如何确保变更集与特定构建相关联?
2) 如何获取自上次良好构建以来分支中已更改的文件列表?我有最后一次成功构建的构建,但我不确定如何在不检查变更集的情况下获取文件(如上所述,它与构建无关!)
msbuild - MSBuild 社区任务中的“找不到文件”——哪个文件?
我正在尝试使用 MSBuild 社区任务的 VssGet 任务,并且错误消息“找不到文件或项目”正在用棍子殴打我。我无法弄清楚错误消息具体指的是什么。这是任务:
如果我编写一个 Streamreader 来读取数据库路径或本地路径,它会成功。因此,通往一切的道路似乎是可以访问的。有任何想法吗?
c# - 单元测试 MSBuild 自定义任务,没有“任务在初始化之前尝试记录”错误
我编写了一些运行良好的 MSBuild 自定义任务,并在我们的 CruiseControl.NET 构建过程中使用。
我正在修改一个,并希望通过调用任务的 Execute() 方法对其进行单元测试。
但是,如果它遇到包含
它抛出一个 InvalidOperationException:
任务在初始化之前尝试记录。消息是...
有什么建议么?(过去,我在自定义任务中主要使用单元测试内部静态方法来避免此类问题。)
msbuild - MSBuild 将另一个项目的输出复制到当前项目的输出中
我有一种情况,我想使用 MSBuild 将输出程序集从一个项目复制到目标应用程序的输出目录中,而在我的 MSBuild Copy 任务中没有硬编码路径。这是场景:
- 项目 A - Web 应用程序项目
- 项目 B - Dal 接口项目
- 项目 C - Dal 实施项目
还有一个业务层,但与我要解决的 MSBuild 问题无关。
我的业务层引用了我的 Dal.Interface 项目。我的 Web 项目引用了业务层,就目前而言,进行构建会将业务层和 Dal.Interface 项目拉入输出。到现在为止还挺好。现在,为了让 Web 应用程序运行,它需要 Dal 实现。我不希望在任何地方引用实现,因为我想强制对接口进行编码并且没有引用意味着它不会出现在智能感知等中。
所以我想我可以通过 MSBuild 复制操作作为 AfterBuild 任务来处理这个问题(我有 Dal 实现设置要在 Web 项目构建时构建,只是没有被引用)。我不想在 MSBuild 参数中硬编码路径或其他任何内容,因此我试图弄清楚如何从 Web 应用程序项目的 MSBuild 文件中引用 Dal 项目的输出。
所以基于上面提到的项目,这是我希望看到的:
- Web 应用程序构建开始
- 所有必需的项目构建(已经配置,所以完成)
- MSBuild“AfterBuild”任务启动,项目 C(Dal 实现)的输出被复制到项目 A(Web 应用程序)的 Bin 目录
第 3 部分是我卡住的地方。
我确信这是可以做到的,我只是没有找到一个很好的参考来帮助。提前感谢您的帮助。
deployment - MSBuild ReadLinesFromFile 一行中的所有文本
当我对 MSBUILD 中的文件执行 ReadLinesFromFile 并再次输出该文件时,我将所有文本放在一行上。所有的回车和 LineFeed 都被去掉了。
我从通常看起来像这样的文件中获取文本
这样出来
我知道 ReadLinesFromFile 的代码将一次将数据拉入一行并去掉回车符。
有没有办法把它们放回去?所以我的电子邮件看起来格式都很好?
谢谢
c# - 在自定义构建任务中运行 Project.Build() 时如何获取构建输出、错误列表?
环境:
C# 项目、Visual Studio 2008、C#、.Net 3.5、MSBuild
客观的:
为我的 C# 项目运行我自己的自定义构建任务,并基于平台(Soln 配置平台),在构建之前对 Project 对象本身进行一些操作。比如将 BuildAction 设置为 EmbeddedResource 等。
完成后,我打电话给Project.Build()
. 我不想在 GlobalEngine 上使用 Project 对象,因为无论如何修改 Project 对象后,它都会将文件标记为脏文件(并从 TFS 签出)。
问题:
因为我使用的是我自己的引擎实例和项目,所以我无法将构建输出、错误定向到 VS。我只得到一个布尔值Project.Build()
。我没有发现任何我可以连接的事件可以允许访问BuildErrorEventArgs
和类似的东西。我知道我可以用来Log.LogErrorEvent()
将消息记录到 VS 错误列表中。但我需要先获得构建输出本身才能做到这一点。
代码:
msbuild - MSBuild ITaskItem 数组已过期
我正在为 MSBuild 创建一个自定义 ITask,它会上传我的构建的输出文件。我正在使用 Web 部署项目来发布我的应用程序并连接到 AfterBuild 目标以完成我的自定义工作。
如果我将文件添加到我的 Web 应用程序,那么在我第一次进行构建时,我的自定义任务无法识别最近添加的文件。为了使该文件显示在我的 ITaskItems 数组中,我必须首先在删除“AfterBuild”目标的情况下进行构建,然后使用“AfterBuild”目标重新开始构建。
这是我的构建文件的样子:
@(PublishContent) 中的列表似乎是在构建开始时初始化的,而不是反映构建过程本身可能发生的任何更改。
有任何想法吗?
谢谢
msbuild - 使用 MSBuild 将多个值传递给 Wix DefineConstants 属性
我目前正在将我的 Wix 项目集成到 MSBuild 中。我有必要将多个值传递给 Wix 项目。一个值将起作用(下面示例中的 ProductVersion)。
但是,如何将多个值传递给 DefineConstants 键?我已经尝试了所有“逻辑”分隔符(空格、逗号、分号、管道符号),但这不起作用。
有没有其他人遇到过这个问题?
不起作用的解决方案:
- 尝试添加 DefineConstants 元素不起作用,因为 DefineConstants 需要在 Properties 属性中表示。
msbuild - 使用 MSBuild 定位不同的框架会产生依赖问题
我有一个小项目,我想要该项目的 2 个编译版本:
- 一种针对 .NET 2.0 框架的
- 一个针对 .NET 3.5 框架的
一切顺利;我已经将我的项目置于持续集成之下(使用 CC.NET),并且我创建了 2 个 CC.NET “项目”。每个目标框架一个项目。
我不会过多介绍(不相关的)细节,但我的解决方案设置为针对 VS.NET 中的 .NET 3.5 框架。
我有 2 个 msbuild 任务:
- 为 .NET 3.5 构建解决方案的一项任务(简单易行)
为 .NET 2.0 构建解决方案的一项任务
在此任务中,我调用 MSBuild,并指定 TargetFrameworkVersion 应为 v2.0。我还定义了一些额外的构建条件(因此 .NET3.5 特定代码不会内置在针对 .NET2.0 的程序集中)。
到现在为止还挺好。一切正常。然而,现在的问题是:
我的解决方案有一些依赖项(对第 3 方程序集的引用)。在 VS.NET 中,我将这些依赖项的“本地复制”设置为 true。当 CC.NET 构建我的 .NET3.5 版本的程序集时,第 3 方依赖项确实被复制到了我的输出目录中。
但是,当 CC.NET 构建我的 .NET2.0 版本的程序集时,依赖项不会复制到我的输出目录中。(然后,这会导致我的单元测试失败)。
我现在的问题是:我如何对 msbuild 说,在构建我的项目的 .NET2.0 版本时必须将某些第 3 方引用复制到本地?或者,有没有其他方法可以实现这一点,因为我不想在我的构建脚本中再次指定每个依赖项。我猜这很快就会成为维护的噩梦。
.net - 如何递归调用 MSBuild 中的任务?
例如,我想每次调用这些脚本传递差异参数: