问题标签 [msbuild-4.0]

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 投票
4 回答
1710 浏览

msbuild - 使用 MSBuild Extension Pack 4.0 读取注册表项失败

我正在使用 MSBuild Extension Pack 4.0 进行本地开发部署。当使用类 MSBuild.ExtensionPack.Computer.Registry 读取注册表项(以获取安装目录)时,它会失败,说路径无效。我相信这是由于 msbuild 是一个 32 位进程,所以它只能看到:

并不是

有没有人在不恢复开发自定义工具的情况下找到解决此问题的方法?

我的实际脚本:

0 投票
1 回答
1763 浏览

.net - MSBuild 4.0 在 XMLQuery 任务(来自 MSBuild 社区任务包)上失败并出现错误 MSB4018

我们使用 MSBuild 来运行一个项目,其中包括通过 Community Tasks 包中的 XMLQuery 任务从 XML 文件中读取一些值。它在 MSBuild 3.5 下运行良好,但在 4.0 下运行时失败并显示以下消息:

错误 MSB4018:“XmlQuery”任务意外失败。System.Xml.XmlException:名称不能以“%”字符开头,十六进制值 0x25。第 1 行,位置 2。在 System.Xml.XmlTextReaderImpl.Throw(String res, String[] args) 在 System.Xml.XmlTextReaderImpl.Throw(Exception e) 在 System.Xml.XmlTextReaderImpl.ParseQName(Boolean isQName, Int32 startOffset, Int32&colonPos) 在 System.Xml.XmlTextReaderImpl.ParseElement() 在 System.Xml.XmlTextReaderImpl.ParseDocumentContent() 在 System.Xml.XmlTextReaderImpl.Read() 在 System.Xml.XPath.XPathDocument.LoadFromReader(XmlReader 阅读器,XmlSpace 空间)在 System.Xml.XPath.XPathDocument..ctor(TextReader textReader) 在 MSBuild.Community.Tasks.Xml.XmlQuery.loadXmlContent() 在 MSBuild.Community.Tasks.Xml.XmlQuery.Execute() 在 Microsoft.Build.BackEnd。任务执行主机。

用于从构建目标中调用 XMLQuery 的代码:

我只是不明白出了什么问题。XML 文件完全有效,并且 XMLQuery 中指定的 XPath 应该返回一个值(并且总是有)。我在任何地方都找不到一个 % 字符。

我不知道如何以及从哪里开始解决这个问题......任何正确方向的指针表示赞赏。

0 投票
1 回答
4132 浏览

msbuild - 如何从正在处理的项目文件中访问 msbuild 命令行参数?

我需要从正在处理的项目文件中访问 msbuild 命令行参数(特别是指定的目标和属性),以便将它们传递给 <MSBuild> 任务的属性。

我的 msbuild 文件使用了大量属性,我不知道哪些属性将通过命令行被覆盖,所以我正在寻找一种方法来传递这些属性,而无需手动将每个属性指定给属性<MSBuild> 任务。类似于 bat 文件中的 $* 变量。

我怎样才能做到这一点?

0 投票
2 回答
6404 浏览

msbuild - 构建时 MSBuild 错误无法识别

我已经安装了VS2010。我有一个包含此内容的简单 .build 文件。

当我尝试通过键入来构建项目时C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe system.build,我收到了这个错误。

C:\System\system.build(2,1):错误 MSB4068:该元素无法识别,或在此上下文中不受支持。

我对推荐或建议感兴趣。

0 投票
2 回答
1389 浏览

msbuild - MsBuild:将引用从 ProjectReference 更改为 Reference

在我们的环境中,我们有两个内部框架和一个单独的网站。在开发过程中,对内部框架的引用往往被设置为项目引用。但是,一旦我们开始发布,内部框架就会安装到 GAC 中,因为它们用于每个服务器上的多个网站实例。所有的 ProjectReferences 都手动更改为 References,并且网站程序集和网站被重新编译和部署。

我正在尝试自动化这个过程。处理这些问题的最佳方法是什么?我已经开始学习 MsBuild 以尝试实现这一目标,但我完全感到困惑。关于如何进行的任何指示和/或建议?

0 投票
1 回答
882 浏览

msbuild - Tfs2010 内部版本号和程序集文件版本和 MSBuild 目标

我阅读了 John Robbins 的文章TFS 2010 Build Number and Assembly File Versions: Completely In Sync with Only MSBuild 4.0,我想知道如何进行集成。

文章的下载有两个文件,一个是targets文件,一个是proj文件。

目标文件有许多任务可以根据 Tfs 内部版本号(与用于构建的版本号相同)刮出内部版本号,并将该编号写入某个位置(称为 BuildNumberFile)以供其他项目文件使用。

proj 文件非常简单。它只是导入上述目标文件,然后声明一个名称为“All”的目标,同时还将 Project 元素上的 DefaultTargets 声明为 All。

我对此有两个问题:

  • 我还在学习 MSBuild。如果目标的名称没有在目标的其他地方指定,那么目标是否被执行?如何确保运行此目标?
  • csproj 文件是否应该为 BuildNumberFile 所在的位置声明一个 Include 项,即使它在编译时才存在?
  • ItemGroups 和 Include 是否有 DependsOnTargets 或允许他们在构建之前确保文件存在的东西?
  • 是否应该将使用它的 csproj 文件的全部内容包装在一个目标中,该目标表示 BuildNumberFile 的 DependsOnTargets?

谢谢!

0 投票
1 回答
7628 浏览

c# - 使用 MSBuild 4.0 记录构建消息

我在代码中使用 MsBuild 4.0,如下所示:

请注意,此 API 与 MsBuild 3.5 完全不同...如何在记录器中挂钩以使用新 API 接收详细的构建消息?

0 投票
2 回答
332 浏览

msbuild - MSBuild:将路径转换为命名空间

我有这样的项目清单:

我想将其转换为这样的项目列表:

有没有办法通过 MSBuild 转换来做到这一点?我试过了,但我只能得到文件名;扩展名和根路径,我可以更改分隔符。但不是路径分隔符。

如果没有,任何其他避免使用自定义任务的解决方案都会受到赞赏。

0 投票
1 回答
204 浏览

msbuild - MSBuild 没有从导入的文件解析正确的路径

我遇到了 MSBuild 4.0 无法正确解析我导入的一个 MSBuild 文件中的路径的问题。文件开头的ProjectOne.csproj导入GenericProject.proj

GenericProject.proj然后在需要时通过如下结构的调用继续导入ProjectOne.settings文件:

我曾假设,当导入解决时,它的路径如下:

/项目根目录/Src/ProjectOne/ProjectOne.settings

但是当通过 MSBuild 运行ProjectOne.csproj时,我得到了一条路径:

/项目根目录/目标/ProjectOne.settings

这没有意义,因为考虑到所有路径都假设是主项目的相对路径,在本例中为ProjectOne.csproj

所以我想知道是否有人知道为什么会这样?

文件夹结构:

  • 项目根
      • 项目一
        • ProjectOne.csproj
        • ProjectOne.settings
    • 目标
      • 通用项目.proj

我认为这并不重要,但以防万一我运行的是 Windows 7 x64

编辑: (1:45-11/7/2010)我能够通过$(MSBuildProjectDirectory)在前面添加标签来解决问题,$(MSBuildProjectName)但我仍然不知道为什么它一开始就没有正确解决。

0 投票
1 回答
1156 浏览

.net - 在安装了 VS2010 的机器上构建和在安装了 7.1 SDK 的机器上构建的区别

我们正在尝试升级我们的代码库以使用 Visual Studio 2010,但在我们的构建服务器上对所有内容进行排序时遇到问题。我们不想在我们的构建服务器上安装 Visual Studio 2010,因此只安装了 .Net 4 框架和 SDK (v7.1)。

我们仍然希望以 .Net 3.5 平台为目标(我们将在未来某个时候升级到 .Net 4,但现在还不想)。

我们已经设法编译了代码,但现在我们遇到了如下运行时错误。

Could not load file or assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

问题是运行时试图反序列化嵌入的资源,如果我查看反射器中的资源,我发现它们都是 .Net 4.0 对象。例如,我们的一个 windows 应用程序的图标是System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.

所以看起来 MSBuild 正在错误地编译资源(使用与目标不同的运行时)?我已经通过查看我的开发机器上构建的 dll 和构建服务器上构建的 dll 的差异来确认这一点 - 很明显,一个 dll 的资源使用 2.0.0.0 版本,而另一个(来自构建服务器)使用 4.0 .0.0。在这两种情况下,项目引用都指向 v2.0.0.0 dll(正如人们所期望的那样)。

有谁知道为什么 MSBuild 将资源编译为 4.0 对象?

提前致谢。

克里斯