【问题标题】:How to compile C# code for multiple frameworks from one set of source files [closed]如何从一组源文件为多个框架编译 C# 代码 [关闭]
【发布时间】:2019-11-12 06:18:53
【问题描述】:

我是许多开源 Nuget 包的作者,我希望我的 Nuget 包方便所有人使用,但配置 Visual Studio 以生成针对不同平台和架构的多个程序集似乎非常困难来自一组源代码。

其中一个主要困难是微软不会为它自己的 Nuget 包执行此操作,因此我的项目必须为我想要定位的每个框架引用不同版本的微软包。这反过来意味着我需要为每个平台使用不同的项目,这对于具有大量源文件的项目来说很尴尬。

我不禁觉得我错过了一些东西,因为很多人一定遇到同样的问题,很难想象经过这么多年的 Visual Studio 开发,这仍然如此困难。

任何人都可以推荐一种组织解决方案、项目、源文件等的模式,这样可以轻松编写一次代码并将其编译为针对 .Net 4.0、.Net 4.5、.Net Standard 1.0 等的多个 DLL。

【问题讨论】:

  • 您可以使用条件引用。答案here 有一个很好的 .NET Core 项目示例。
  • 这是相当广泛的,但是这个网站已经很好地涵盖了制作这样一个解决方案的各个“位”,例如对于包和 DLL 引用 stackoverflow.com/a/58192509/397817 ;对于条件编译stackoverflow.com/a/57031308/397817 - 这只是我从自己的答案中摘录的 2 个 :)
  • 另一方面,它真的可以像this 一样简单。因此,它确实在很大程度上取决于我们没有信息的代码和其他细节。
  • 我尝试了共享项目和 元素。总的来说,我认为 是可行的方法,但它涉及对项目文件进行大量手动编辑,这让我一直感到不舒服。我想现在 Visual Studio 对编辑项目文件有更好的支持,也许这更容易接受。

标签: c# visual-studio nuget cross-platform


【解决方案1】:

下面是设置多个目标框架的方法,这会导致生成多个输出文件夹。

<TargetFrameworks>netstandard1.0;net45;net40</TargetFrameworks>

我认为除了以下之外,没有其他方法可以处理输出平台和依赖版本之间的映射:

<ItemGroup Condition=" '$(TargetFramework)' == '<version>'">
    <PackageReference Include="<dependency_name>" Version="<version>" />
</ItemGroup>

关于从旧项目迁移过程的详细说明,请参阅here

【讨论】:

  • 这只是其中的一部分。该问题专门询问如何处理仅特定框架需要的引用。
  • @Herohtar,版本可以这样处理。这似乎并不严格,但似乎没有更方便的方式。
  • 我认为这是正确的方法,但您的答案不完整。如果您愿意改进它,我会将其标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 2011-09-23
相关资源
最近更新 更多