问题标签 [msbuild-15]

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 投票
1 回答
147 浏览

msbuild - PackageReference 将版本逻辑解析为 API

是否有任何可通过 MSBuild 任务、目标或其他方式访问的 API,允许我查询给定 PackageReference 将解析(或已经解析)到哪个版本的 NuGet 包?

例如,如果我有一个 csproj

我有一个我想要的自定义目标

0 投票
0 回答
378 浏览

msbuild - 自定义道具/目标的 MSBuild 设计实践

我有一个 NuGet 包,我正在使用自定义 props/targets 文件,我想知道在定义和覆盖方面如何处理许多属性、项目和目标的最佳实践。

将所有属性直接放在我的MyNuGetPackage.targets文件中并且根本不使用它会更好MyNuGetPackage.props吗,像这样?

UseMyTarget还是在.props文件中无条件地定义并将目标保留在 .targets 文件中是更好的做法?

如果我需要捕获 Microsoft 或其他人为其设置默认值的属性,这两种方法都会失效。例如:

如果我在 中定义它.propsOutputPath可能尚未设置...

另一方面,许多作者似乎只使用.targets自己......所以我最好只为我的依赖事物做这样的事情.targets而不打扰.props文件吗?

微软自己的 MSBuild 道具/目标的做法似乎根本不遵循任何类型的标准/约定。

我确实希望允许消费项目能够.props/.targets通过设置Properties/Items/Targets自己来改变我的行为。

0 投票
0 回答
231 浏览

msbuild - 将 NuGet 元包创建为 MSBuild 项目

是否有任何真正的方法可以将 NuGet 元包创建为 msbuild .proj 而不是直接使用 nuspec?我想这样做,以便我可以利用其他 MSBuild 功能,包括 PackageVersioning,包括内容文件等。

我的意思是我想为我的元包创建一个简单的项目(比如说 MyMetaPackage.proj:

这样做的问题是 MyMetaPackage.nupkg 最终将所有 contentFiles 和海关道具/目标导入其中,这搞砸了,即使它只是一个元包 - 这些事情应该只为 MyMetaPackage 的消费者完成。

将 PrivateAssets 添加到 MyMetaPackage.proj 根本没有帮助,因为 nuspec 也会将它们排除在外,并且它们也不会传递给消费者。

0 投票
1 回答
3059 浏览

msbuild - 使用 MSBuild ProjectReference 在构建中包含其他文件?

我有一个类库,它有几个依赖的文件,并且必须将这些文件打包以便与任何依赖该库的项目一起部署。现在这意味着除了将库添加为 MSBuild PrjectReference 之外,我还必须自定义每个依赖项目以确保它们复制文件。添加更多文件时,必须更新所有项目。

我一直在通过 Microsoft.Common.targets 寻找一种将这些文件包含在库自己的项目文件的输出中的方法,因此任何对库有 ProjectReference 的项目都会在构建时自动获取这些文件。我还没有任何工作,但如果这可能的话,我会更普遍地好奇。看起来应该是这样,_CopyFilesMarkedCopyLocal 目标甚至尊重其他未使用的 %(DestinationSubDirectory) 元数据项,该元数据项将允许自定义放置这些文件,这将是完美的。

我相信我缺少的是,对于构建依赖于项目 B 的项目 A,将项目 B 的项目输出添加到项目 A 的构建项目中的部分。

编辑:Leo 的评论,我没有注意到标有 CopyToOutputDirectory 的文件也被复制到依赖的项目输出目录,因为我们使用的 ItemGroups 的名称不是 Content、EmbeddedResource、None 等。深入挖掘,使用这些的目标是 GetCopyToOutputDirectoryItems 和它似乎递归调用 MSBuild 任务来确定项目输出,所以我应该能够定义一些可以导入到我们的项目中的自定义目标,在 GetCopyToOutputDirectoryItems 目标中添加我们的自定义 ItemGroups,这样我们就不必使用内容/无等

但是,执行复制的目标是 _CopyOutOfDateSourceItemsToOutputDirectoryAlways,不幸的是它不尊重 %(DestinationSubDirectory),因此所有这些文件都直接复制到 $(OutDir)。

我的新目标是查看是否有某种方法可以将自定义文件添加到依赖项目的 ReferenceCopyLocalPaths ItemGroup 中,以便它们被 _CopyFilesMarkedCopyLocal 目标复制,该目标确实利用了 %(DestinationSubDirectory)。

0 投票
1 回答
687 浏览

c# - 如何使用 msbuild 15 从生成的 nuget 包中的 nuspec 文件中删除依赖项部分

我使用 msbuild v15.8.168.64424 (vs 2017.8) 命令行为控制台应用程序构建 nuget 包。我使用 ILMerge 合并所有依赖项,所以我只得到一个没有依赖项的 exe 文件。

运行命令时

我得到了 nuget 包,但是在检查它时,我发现dependencies section.

我希望 `dependencies 部分为空(因为我合并了所有依赖项)。

我可以使用 nuspec 文件生成没有依赖项部分的包,但缺点是手动传递 csproj 中包含的所有元数据。我没有在包目标输入中找到依赖项的属性

问题:

如何从生成的 nuget 包中包含的 nuspec 文件中删除依赖项部分?

0 投票
1 回答
126 浏览

windows - msbuild 15 在解决方案目标之前是否支持?

我已经安装了 VS 2017 并开始使用 MSBuild 15 构建我的解决方案。我立即注意到我的before.{SolutionName}.sln.targets文件都没有加载。

我用 ProcMon 进行了检查,文件已打开并无错误地读取。但是他们的动作都没有运行。

有没有人遇到过这种情况?欢迎任何帮助。

编辑 1

这是我的文件:

它在 VS 2015 中工作,但在 VS 2017 中停止工作。

0 投票
0 回答
59 浏览

msbuild - 是否可以使用 VS 2017 调试 msbuild 15 脚本?

有这篇旧文章 - https://blogs.msdn.microsoft.com/visualstudio/2010/07/06/debugging-msbuild-script-with-visual-studio/

但这似乎与 msbuild 15 无关。

0 投票
0 回答
734 浏览

c# - 将 Asp.net Webapi 项目从 .net 4.6.2 框架升级到 .net 4.7.2,并将现有项目格式更改为 MsBuild 15 格式

我正在将 Asp.net Webapi 项目从 .net 4.6.2 框架升级到 .net 4.7.2,并将现有项目格式更改为 MsBuild 15 格式。

在本地开发机器上,它可以正常工作,没有任何问题。

我的应用程序部署在 Azure webapp 上。尝试访问我的 webapi 时出现错误。

  1. 无法使用命令行“dotnet .\WebApplication6.dll”启动进程,ErrorCode = '0x80004005'。

  2. 我在现有项目中使用 elmah。我还看到问题 ConfigurationErrorsException。

    /li>

我没有找到任何有用的资源来转换为 .net 4.7.2 和 ms build 15 项目格式。

物业集团

网页配置

全球.asax

我试图了解我的方法是否正确。我可以将项目转换为 Ms Build 15 格式并使用 .net 框架 4.7.2 而不使用 asp.net 核心并部署到 Azure Web 应用程序吗?

一旦我发布到 azure webapp 上面的 web.config 行,默认情况下会添加。除非我引用.net核心,否则不确定为什么要添加这些行。

0 投票
1 回答
2051 浏览

jenkins - 使用 jenkins 构建时,MSBuild 没有为 nuget PackageReference 添加 /reference

我有一个 jenkins 构建,它可以清理、恢复,然后构建一个单元测试项目。这个项目以及我的其他项目最近已迁移到使用PackageReference. 清洁工作,恢复工作。我验证了 NUnit 存在于%userprofile%/.nuget/packages/. 以下是我的构建脚本中的命令:

这稍后会产生如下所示的输出:

我的项目的构建失败,因为它找不到 NUnit(见下文)。我相信它找不到 NUnit,因为编译命令不包含对 NUnit nuget 包的“/reference”。

我的其他项目确实有 NuGet 包的“/reference”。所以我比较了它们,看看是否有什么明显不同。我确实注意到我的大多数项目一开始都包含这一行:

我认为这可能是罪魁祸首,基于我对这条线的简短阅读,但是当我在本地机器上尝试相同的步骤时(它有 VS2017 和 MSbuild 15,就像 jenkins 服务器一样)我无法复制这个问题.

我的.csproj文件有以下内容:

0 投票
2 回答
1998 浏览

msbuild - 如何合并 Directory.Build.props 文件中的属性而不是覆盖属性?

我有以下Directory.Build.props文件:

每当我在子文件夹(在 Visual Studio 2019 中)中加载(C++)项目时,该项目都会丢失所有继承的包含和库路径:

继承价值观: 继承的价值观

我在想这可能是因为我没有附加到IncludePathand LibraryPath,所以我这样做并更改了props文件如下:

然后重新加载项目,再次导致丢失继承的值。

我仔细检查了宏是否存在,它们是(VC_WindowsSDK_宏):

存在宏

我还尝试更改Directory.Build.propsDirectory.Build.targets在加载项目后加载它,但是文件根本没有加载。

如何确保我Directory.Build.props继承默认值并附加我的自定义选项?

我想这样做的原因是因为我正在从已弃用的Microsoft.Cpp.Win32.user.props文件中迁移出来。

将扩展名更改为.targets仅适用于构建过程,但智能感知/视觉工作室不会处理包含文件,并且会显示很多错误(在编译之前)。这不是优选的。