我有一个项目,我希望能够在UWP / UAP10.0项目和.NET4.5 Web API项目(或使用常规类库的任何其他类型)中用作nuget包。 / p>
我已将原始的.NET4.5代码移植到可移植类库中,以便能够在nuget中将其打包并在UWP环境中使用它。我现在的问题是我不能在nuget包(相同的dll,多个lib目标)的常规.NET4.5应用程序中使用相同的dll。
我目前正在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" />
答案 0 :(得分:2)
嗯,保留现有结构但避免在磁盘上拥有多个C#源文件副本的最简单方法是将链接添加到现有文件而不是添加副本
这是怎样的。
首先确定哪个项目是&#34; master&#34;。这应该包含其中的所有(或至少大部分)文件,作为普通的源代码文件。根据您的描述,您可能只需确定您已经必须使用哪个项目。
然后,在其他项目中首先确保您没有对文件进行本地更改(如果您这样做,请进一步查看)。如果您不这样做,请继续以下操作:
现在,这将把其他(非主)项目链接到作为主项目一部分的单一源代码集。
您总会发现需要进行一些本地更改,一个平台上的课程不在另一个平台上,或者您需要稍微不同的代码。一个典型的问题是某些构造函数可能在不同平台上丢失。
在这种情况下,您将在项目中设置一组条件定义,并使用#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节点的复数更改