我也曾经为此苦苦挣扎,但是我找到了比繁琐的NuGet包解决方案更好的解决方案。我在Stackify上找到了这篇文章。这篇文章仅讨论了使用单独的解决方案,但是只使用一个解决方案非常容易。
.NET项目的分离解决方案
这个选项需要两个解决方案文件以及每个项目使用.NET核心和.NET 4.x.x的两个项目文件。首先创建一个全新的空白解决方案。接下来创建一个新的Windows“类库”(你给它命名并不重要)。将其从解决方案中删除,以便编辑.csproj文件。打开.csproj文件并将
AssemblyName
XML元素更改为.NET核心项目程序集名称。你现在应该对项目进行任何其他名称相关的更改。关闭.csproj并将其重命名为与.xproj文件相同的名称。将其复制到与.xproj文件相同的文件夹中。
现在你的新闪亮的.csproj文件已经准备好了,魔法就要发生了。创建一个名为
ProjectName.project.json
的文件,并将以下文本添加到其中(根据需要修改.net框架)
{ "runtimes": { "win": {} }, "frameworks": { "net461": {} }}
在.NET 4.x.x解决方案中,重新加载此修改后的.csproj文件,然后可以添加源文件。我发现最简单的方法是按“显示所有文件”并在右键上下文菜单中单击每个文件/文件夹的“包含在项目中”。现在尝试构建.csproj,它应该能够成功构建。如果不能成功构建,请尝试重新加载项目或重启Visual Studio。
同一个解决方案,但有两个项目
这与前面的相同,但有几个关键区别。.csproj文件的名称必须与.xproj的名称不同(我只添加了后缀,例如
MyProjectName.win.csproj
和
MyProjectName.win.project.json
)。这些可以添加到同一个解决方案中而没有名称冲突。你甚至可以将.csproj中的
AssemblyName
元素设置为.NET核心程序集名称,因为输出文件夹取决于.NET版本。
最后的想法
我发现这个解决方案比NuGet包选项好多了。唯一需要考虑的小事情是所有对任何引用、NuGet包或任何新文件的修改都必须添加到两个项目中。虽然如此,但这是避免可怕的NuGet包选项所付出的小代价。让我们祈祷VS团队能尽快让.xproj引用在.cspoj文件中起作用。
我知道我不应该发布链接,但我想表扬一下作者。 http://stackify.com/using-both-xproj-and-csproj-with-net-core/
该文章介绍了如何在使用.Net Core时同时使用xproj和csproj文件。