问题标签 [msbuild]

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.

0 投票
6 回答
2679 浏览

delphi - 在项目之间共享 Delphi 源文件的最佳方式是什么?

在项目之间共享 Delphi 源文件的最佳方式是什么?

澄清:我们想在多个 Delphi 项目中使用单个源文件。我们一直在使用我们的 SCM 工具将同一个文件放入多个文件夹,但这并不是一种超级优雅的体验,我们也在考虑迁移到不支持此功能的工具。

当我一直在调查这个问题时,我考虑了几种不同的方法,但我想知道你在做什么以及你是如何找到你的方法的。

重要场景​​:

  • 代码时间
    • 添加新的共享依赖项应该需要显式声明,以便管理共享。
    • 添加一个新的共享依赖应该还是比较简单的;它不应该需要一个复杂的过程。
      • 一个列出所有项目“导入”文件(从外部)的文件会很好。
  • 编译时
    • 所有项目都应始终使用一个当前版本(源同步状态的当前版本加上本地编辑)构建。
      • (在不同位置维护不同版本应该使用文件分支,这里不做主题。)
    • 每个项目是否应该能够使用不同的编译器设置(包括标志)影响共享文件的编译是有争议的。
      • 可以说维护(即长期)始终一致构建的源代码更容易。
      • 如果可以轻松地将所述更改的范围限制在一个项目中,那么进行维护修复(即短期)可能会更容易。
  • 调试时
    • 在进入例程或设置断点时,应自动打开正确版本的源代码。
    • 编辑显示的源应该会影响下一个构建。
      • 我们不想针对源的临时副本进行调试:我们可能会在混乱中丢失代码。

注意事项:

  • 短期:
    • 什么方法最容易实施?
  • 长期:
    • 哪种方法最易于使用和维护?

提前感谢您的反馈!

马蒂亚斯


- - 更新 - -

感谢您通过回答、评论和投票提供反馈!

我已经开始了将共享文件放入一个“生产者”项目并将已编译文件列表导入每个“消费者”项目的路径。这些项目正在与 MSBuild 链接在一起。一旦事情更加明确,我将编辑这个问题和“图书馆项目”的答案,分享我学到的东西。

敬请关注!(但不要屏住呼吸;你会在几分钟内窒息!:P)

0 投票
5 回答
4343 浏览

visual-studio - Visual Studio - 如何在发布模式下删除引用

我正在开发一个用于其他应用程序的库,并且由于 NLog,这个库有很多调试和日志记录语句。

切换到发布模式时是否可以排除对 NLog.dll 的引用?

干杯,

0 投票
6 回答
7403 浏览

c# - 单元测试 MSBuild 自定义任务,没有“任务在初始化之前尝试记录”错误

我编写了一些运行良好的 MSBuild 自定义任务,并在我们的 CruiseControl.NET 构建过程中使用。

我正在修改一个,并希望通过调用任务的 Execute() 方法对其进行单元测试。

但是,如果它遇到包含

它抛出一个 InvalidOperationException:

任务在初始化之前尝试记录。消息是...

有什么建议么?(过去,我在自定义任务中主要使用单元测试内部静态方法来避免此类问题。)

0 投票
3 回答
744 浏览

unit-testing - 学习 MSBuild 的最佳资源有哪些?

我正在寻找关于StackOverflow 社区用来更好地学习MSBuild 的最佳和有效资源的任何和所有建议,重点是将单元测试和后来的静态代码分析工具(如 FxCop 和 StyleCop)集成到构建过程中。

我试图找到关于将单元测试添加到我的构建中的良好清晰文档,但我仍在搜索 - 甚至 Google 搜索都出现空洞或只有零碎。理想情况下,我想添加单元测试、报告结果,并最终将代码覆盖率统计等添加到构建结果中。

我知道它必须在 MSDN 的某个地方,但我似乎找不到任何可以很好地解释和教授的东西。我正在使用 Visual Studio Team System 2008。

0 投票
4 回答
1471 浏览

c++ - 使用 msbuild 时抑制 C++“生成后事件”

我正在使用 msbuild 构建一个 C++ 项目,并且我想抑制“构建后事件”。我尝试了以下属性但没有成功:

两者都不会产生任何影响,并且仍会执行构建后事件。

有谁知道如何使用 msbuild 抑制这些(以及可能的其他)事件?

0 投票
2 回答
14457 浏览

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 项目的输出。

所以基于上面提到的项目,这是我希望看到的:

  1. Web 应用程序构建开始
  2. 所有必需的项目构建(已经配置,所以完成)
  3. MSBuild“AfterBuild”任务启动,项目 C(Dal 实现)的输出被复制到项目 A(Web 应用程序)的 Bin 目录

第 3 部分是我卡住的地方。

我确信这是可以做到的,我只是没有找到一个很好的参考来帮助。提前感谢您的帮助。

0 投票
4 回答
13807 浏览

.net - 为什么 MSBuild 没有像我期望的那样复制

我需要编写我的构建脚本。我正在使用 MSBUILD,因为它与 VS.net 集成。我正在尝试将一些文件从构建环境复制到部署文件夹。我正在使用 MSBuild 的复制任务。但不是像我期望的那样复制目录树。它将所有内容复制到一个文件夹中。我重复目录树中的所有文件,最终都放在一个文件夹中。我需要它将文件夹和目录树复制到目标文件夹中。有什么我想念的吗?

这是我的构建脚本的相关部分:

0 投票
9 回答
23478 浏览

c# - Visual Studio 中的“将所有警告视为错误,除了...”

在 Visual Studio 中,我可以选择“将警告视为错误”选项,以防止在出现任何警告时编译我的代码。我们的团队使用此选项,但我们希望保留两个警告作为警告。

有一个禁止警告的选项,但我们确实希望它们显示为警告,所以这不起作用。

似乎获得我们想要的行为的唯一方法是将每个 C# 警告编号的列表输入到“特定警告”文本框中,除了我们想要视为警告的两个。

除了维护麻烦之外,这种方法的最大缺点是一些警告没有数字,因此无法明确引用。例如,“无法解析此引用。无法找到程序集 'Data....'”

有谁知道更好的方法来做到这一点?


为那些没有立即明白为什么这是有用的人澄清。想想大多数警告是如何工作的。他们告诉你,你刚写的代码有些不对劲。修复它们大约需要 10 秒,这样可以保持代码库更干净。

“过时”警告与此有很大不同。有时修复它意味着只使用一个新的方法签名。但是,如果整个类已经过时,并且您在数十万行代码中分散使用它,则可能需要数周或更长时间才能修复。您不希望构建被破坏那么久,但您肯定希望看到有关它的警告。这不仅仅是一个假设的案例——这已经发生在我们身上。

文字“#warning”警告也是独一无二的。我经常检查它,但我不想破坏构建。

0 投票
2 回答
240 浏览

c# - 什么是在 C# 中处理条件依赖的最佳方法

我们正在构建一个 C# .NET 应用程序,它将在卡车内的计算机上运行。我们需要与卡车计算机上的数字 IO 端口进行通信,这些端口在我们的开发人员机器上不存在,因此我需要编写一个虚拟库,该库将包含在我们的开发版本中,但当我们使用实际的数字 IO 库替换时发布。我希望这个库替换能够通过构建过程自动化。

来自 Java 背景,我可以使用构建配置文件在 maven 中轻松完成此操作。有没有类似的方法可以使用 MSbuild 做到这一点?如果不是,那么在 C# microsoft 领域中处理此问题的最佳方法是什么。

0 投票
3 回答
8449 浏览

.net - 引用 COM 对象 ActiveD 或 MSXML2 时出现大量构建警告

将项目从 .NET 1.1 移动到 .NET 2.0 后,MsBuild 会针对某些 COM 对象发出大量警告。

测试示例代码(实际代码无关紧要,仅用于创建警告):

警告消息看起来像

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets:警告:运行时封送处理程序无法封送“ITypeLib.RemoteGetLibAttr”的至少一个参数。因此,此类参数将作为指针传递,并且可能需要不安全的代码来操作。

观察:

  • ActiveDs(11 个警告)和 MSXML2(54 个警告)会发生这种情况。
  • 我们自己的 COM 对象没有看到。
  • <Reference>.csproj 文件中的条目包含属性WrapperTool = "tlbimp"
  • 尽管有所有警告,但在运行的系统中没有发现任何问题。

知道如何摆脱警告吗?