[英]Compile identical C# code for UAP and .NET4.5
我有一个项目,希望在UWP / UAP10.0项目和.NET4.5 Web API项目(或使用常规类库的任何其他类型)中都可以作为nuget包使用。
我已将原始.NET4.5代码移植到可移植类库中,以便能够将其打包为nuget并在UWP环境中使用。 我现在的问题是,我不能在nuget包的常规.NET4.5应用程序中使用相同的dll(相同的dll,多个lib目标)。
我目前正在Visual Studio中编译和打包两个项目:一个可移植类库,一个类库。
这一点根本没有效率,因为我有完全相同的代码副本。 有什么办法可以将一个项目维护/构建到nuget包的多个类库中? 还是有另一个项目包含可移植类库和类库都引用的相同代码?
这是我目前在nuspec中所做的事情:
<file src="MyApp\bin\Release\MyApp.dll" target="lib\net45\MyApp.dll" />
<!-- .NET 4.5.2 -->
<file src="MyApp\bin\Release\MyApp.dll" target="lib\net452\MyApp.dll" />
<!-- .NET 4.6 -->
<file src="MyApp\bin\Release\MyApp.dll" target="lib\net46\MyApp.dll" />
<!-- UAP -->
<file src="MyApp.Portable\bin\Release\MyApp.Portable.dll" target="lib\uap10.0\MyApp-Uap10.dll" />
嗯,保留现有结构但避免在磁盘上拥有C#源文件的多个副本的最简单方法是简单地向现有文件添加链接 ,而不是添加副本 。
这是如何做。
首先确定哪个项目是“主人”。 作为普通的源代码文件,它应该包含所有(或至少大多数)文件。 根据您的描述,您可能只需要确定已经要用于哪个项目。
然后,在其他项目中, 首先请确保您没有对文件进行本地更改(如果有,请参阅下文) 。 如果不这样做,请继续执行以下操作:
现在,这会将其他(非主项目)项目链接到作为主项目一部分的单个源代码集。
总是会发现您需要一些本地更改,一个平台上可用的类不在另一个平台上,或者您需要稍微不同的代码。 一个典型的问题是,不同平台上可能缺少某些构造函数。
在这种情况下,您将在项目中设置一组条件定义,并使用#if
指令进行处理。 希望你没有大量的差异或这将会使你的代码一团糟。 如果可以使用它,它将使代码如下所示:
#if UAP
... code for the UAP platform here
#else
... code for all the other platforms here
#endif
此外,针对.NET Standard,现在有一个新的项目类型,并且该单个项目类型可以同时针对多个平台。
要使用此程序,请遵循以下步骤:
找到看起来像这样的行:
<TargetFramework>netstandard1.3</TargetFramework>
并将其更改为:
<TargetFrameworks>netstandard1.3;net45;net46</TargetFrameworks>
注意此处对xml节点的复数更改
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.