问题标签 [msbuild-projectreference]

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 回答
961 浏览

.net-core - 如何从 .NET Core 项目 (VS2017) 引用 .NET 4.5.2 库

我有一个在 VS2017 中创建的 .NET Core 类库。我需要引用针对 .NET 4.5.2 的程序集构建。添加引用时,我收到以下错误:

当我尝试通过 VS 添加引用时,我看不到可以找到它的来源:在此处输入图像描述

类似的问题已经在此处提出在此处进行了描述,但答案描述了如何扩展project.json现在已过时且未出现在 VS2017 中的文件。

0 投票
2 回答
2917 浏览

msbuild - Visual Studio Community 2017 中的条件引用

我正在创建一个多平台应用程序。我有一个多目标共享库(针对 .netstandard 2.0 和 .net 4.5)...查看项目文件:

当我在 windows 上的 Visual Studio 2017 中构建项目时,我在输出中得到两个目录(netstandard2.0、net45)和相应的 dll。构建是成功的。

当我在 mac 上的 Visual Studio 2017 中构建完全相同的项目(相同的代码)时,我得到了这种性质的错误:

'OptionAttribute' 类型存在于'CommandLine.DotNetStandard, Version=1.0.30' 和'CommandLine, Version=1.9.71.2'

我通过以下方式有条件地引用了命令行解析器库:

这适用于 Windows,但在 mac 上似乎没有观察到这种情况。这是 Mac 上 Visual Studio 的已知错误吗?难道我做错了什么?

0 投票
0 回答
143 浏览

msbuild - msbuild中多个项目引用库时共享冲突

我遇到了 msbuild 的问题。我有一个三层的项目文件。最低的创建库,其中一些是语言中立的,而其中一些是特定于语言的。下一层构建一个项目,将语言中性库与特定语言的库组合成一个产品。最后一层为不同的语言多次构建产品。

我遇到的问题是语言中性库正在构建多次,当我使用 /m 标志调用 msbuild 时,我在构建过程中遇到共享冲突,因为多个线程最终构建了语言中性项目。有人告诉我,如果我在 MSBuild 任务上使用 RemoveProperties 参数以使所有属性都匹配,则 msbuild 只会构建项目一次。我试图这样做,但无法让项目只构建一次。我查看了诊断日志并创建了一个自定义记录器来尝试找出要添加到 RemoveProperties 参数的属性。

我的问题是 msbuild 如何决定同一个项目文件的两次调用是相同的,并且应该只构建一次。根据传递给我的自定义记录器的 OnProjectStarted 事件的信息,所有全局属性都是相同的。还有什么我需要匹配的吗?

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 回答
1186 浏览

c# - .NET 462 项目引用时,bin 中缺少 .NET Standard 2.0 dll 的瞬态依赖项

如果 .NET 462 项目引用 .NET Standard 2.0 dll,则不会将依赖项复制到输出 bin 文件夹。

当 .NET Standard 2.0 项目被引用<ProjectReference /><RestoreProjectStyle>PackageReference</RestoreProjectStyle>添加到 .NET 462 项目时,它可以正常工作。

我的 .NET Standard 2.0 项目位于不同的解决方案中,因此无法添加为项目参考。

是否有解决此问题的方法,可能会考虑 .NET Standard 2.0 项目的 bin 文件夹中的 deps.json ?

或者是将 .NET Standard 2.0 项目添加到所有解决方案的唯一解决方案,其中项目引用它?

0 投票
0 回答
375 浏览

c# - 在 .Net Framework => .Net Standard 项目中启用传递项目引用

我有一个项目设置如下:

我希望项目 C 能够传递地访问项目 A 的类型。但是,在我的项目 C (.Net Framework 4.8) 中引用项目 B (.Net Standard 2.0) 它无法解析来自项目 A (.Net Standard 2.0) 的任何类型。

我的理解是默认情况下启用传递项目引用的新方法,但是如果不添加对项目 A 的直接引用,我就无法构建项目 C。

我试过玩,<IncludeAssets>all</IncludeAssets><PrivateAssets>none</PrivateAssets>没有<DisableTransitiveProjectReferences>false</DisableTransitiveProjectReferences>运气。

0 投票
1 回答
95 浏览

visual-studio - 尽管标记为 PrivateAssets,但 nuget 包中的项目依赖项仍被复制到应用程序 bin 文件夹

我有一个名为 MyHelper 的 .netcore2.0 应用程序。MyHelper 引用了一个名为 B 的 .netstandard2.0 项目。MyHelper 作为 nuget 包发布。

我只需要在构建时在其他项目和解决方案中使用 MyHelper,因此在我的其他项目中,我将此 nuget 包标记为私有:

但是,在我使用此 nuget 包的其他项目的输出文件夹中,存在 B.dll。我不希望这样,因为它仅用于构建时间。如何阻止它被运送到应用程序。谢谢

0 投票
0 回答
18 浏览

xml - 在引用的项目中调用 msbuild 任务

假设我有一个带有以下行的 a.msbuildproj 文件:

从 cmd 窗口调用以下命令将执行该命令:

我想要做的是有一个 b.proj 文件将引用 a.msbuildproj 文件,并且在 b.proj 文件上调用“MyTarget”目标时,它将被识别。比如b.proj的内容是:

调用以下命令应激活 a.msbuildproj 中定义的“MyTarget”:

但是,我收到一个错误(这是有道理的),在 b.proj 文件中找不到“MyTarget”。

有没有办法从 b.proj 引用 a.msbuildproj 文件,以使其目标也可以从 b.proj 中识别?

感谢您的帮助,哦哈德

0 投票
0 回答
7 浏览

visual-studio - 如何让 MSBuild 使用生成的依赖项?

我正在开发一个使用 OpenAPI 和 CSharp 服务器的 API 优先开发的代码库。openapi codegen 创建一个包含我们所有模型和端点 AspNet 设置的库,然后我们的主服务器项目将导入该库。

目前,这意味着我们必须从 Visual Studio 外部重建项目(通过 bash 脚本),并使用本地 ProjectReference 到不在我们解决方案中的项目。我们如何以 Visual Studio 尊重的方式将此代码生成折叠到正常构建中?


粗略结构:

使用由 shell 脚本生成的整个out/文件夹,以及依赖于 CsharpServerLib 的 CsharpServer。