我的解决方案中有2个项目。首先是面向.NET Standard 1.3的可移植库。该库与Json.NET有依赖关系。它的project.json如下所示:
{
"supports": {},
"dependencies": {
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.0",
"Newtonsoft.Json": "9.0.1"
},
"frameworks": {
"netstandard1.3": {}
}
}
图书馆只包含这个简单的类:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestLibrary
{
public class TestClass
{
public static string Foo() {
return JsonConvert.SerializeObject(42);
}
}
}
第二个项目是针对完整.NET 4.6.1框架的控制台应用程序。此控制台应用程序引用上面提到的库代码如下:
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
var x = TestLibrary.TestClass.Foo();
}
}
}
我可以构建并运行它,但调用TestLibrary.TestClass.Foo()
会导致以下异常:
无法加载文件或程序集“Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其中一个依赖项。系统找不到指定的文件。“:”Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed“
我的bin文件夹中没有Newtonsoft.Json.dll
。
我安装了Visual Studio 2015 Update 3(KB3165756)(14.0.25431.01,于2016年9月14日发布)以及.NET Core 1.0.1 VS 2015 Tooling Preview 2.
花了太多时间谷歌搜索后,我不确定是否a)我做错了什么b)工具不支持这种情况c)我的Visual Studio安装在某种程度上被破坏了。
答案 0 :(得分:2)
PCL库项目使用project.json文件管理包,但常见的.NET Framework项目使用packages.config管理NuGet包。
我已经测试过我是否手动在控制台应用程序中安装了Newtonsoft.Json软件包,它可以成功运行。如果我使用.NET Core Console应用程序引用PCL库项目,该应用程序也使用project.json文件管理NuGet包,则该解决方案也可以成功运行。
因此,在您的情况下,您需要手动将PCL库项目中的NuGet包安装到您的控制台应用程序中。
答案 1 :(得分:2)
您不必手动安装.NET标准库的依赖项。
微软最终承认这是一个问题,而且will fix预计会在NuGet 4.0.1版本中出现,这是VS 2017发布后对NuGet 4的第一次更新。
现在最简洁的解决方法是将<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
添加到旧版本(在本例中为.NET 4.6.1。应用程序)项目中。但是according to Rob Relyea MS会在RTM之后忽略此属性,因此另一种解决方法是<PackageReference Update="PlaceholderToConvinceThisProjectToGetTransitivePackageReferenceFromProjectReferences"/>
。
另一种解决方法是将.NET标准库打包到NuGet包中,就像在that answer中一样,但这不是最简单的方法。