Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从一组源文件为多个框架编译C#代码_C#_Visual Studio_Nuget_Cross Platform - Fatal编程技术网

如何从一组源文件为多个框架编译C#代码

如何从一组源文件为多个框架编译C#代码,c#,visual-studio,nuget,cross-platform,C#,Visual Studio,Nuget,Cross Platform,我是许多开源Nuget软件包的作者,我希望我的Nuget软件包能够方便所有人使用,但要配置Visual Studio从一组源代码生成多个针对不同平台和体系结构的程序集似乎有点不合理的困难 其中一个主要的困难是微软没有为自己的Nuget软件包做这项工作,因此我的项目必须为我想要针对的每个框架引用不同版本的微软软件包。这反过来意味着我需要为每个平台使用不同的项目,这对于有大量源文件的项目来说是很尴尬的 我忍不住觉得我错过了一些东西,因为很多人肯定也遇到了同样的问题,很难想象在VisualStudio

我是许多开源Nuget软件包的作者,我希望我的Nuget软件包能够方便所有人使用,但要配置Visual Studio从一组源代码生成多个针对不同平台和体系结构的程序集似乎有点不合理的困难

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

我忍不住觉得我错过了一些东西,因为很多人肯定也遇到了同样的问题,很难想象在VisualStudio这么多年的发展之后,这仍然是如此困难


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

下面是设置多个目标框架的方法,这些框架将生成多个输出文件夹

<TargetFrameworks>netstandard1.0;net45;net40</TargetFrameworks>
netstandard1.0;net45;网络40
我认为除了以下方法外,没有其他方法可以处理输出平台和依赖项版本之间的映射:

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


有关从旧项目迁移过程的详细说明,请参见

您可以使用条件引用。答案是一个很好的.NET核心项目的例子。这是一个相当广泛的问题,但是在这个网站上已经很好地涵盖了实现这种解决方案的各个“位”,例如包和DLL参考;对于条件编译——这只是我从自己的答案中提取的2条:)另一方面,它真的可以简单到。所以,这在很大程度上取决于代码和其他我们没有相关信息的细节。我用共享项目和元素进行了实验。总的来说,我认为这是一条路要走,但它涉及到对项目文件的大量手动编辑,这让我一直感到不舒服。我想现在VisualStudio对编辑项目文件有了更好的支持,也许这更容易接受。这只是其中的一部分。这个问题特别询问如何处理只对特定框架需要的引用。@Herohtar,版本可以这样处理。这似乎没有限制,但似乎没有更方便的方法。我认为这是正确的方法,但你的答案是不完整的。如果你想改进它,我会把它标为正确答案。