(VS2015 Update 3补丁)
我有一个简单的.NET控制台应用程序(.NET 4.6)并引用了一个针对NetStandard v1.3的.NET核心类库 . 类库引用了Newtonsoft.JSON .
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.6.0",
"Newtonsoft.Json": "9.0.1"
},
"buildOptions": { "platform": "anycpu" },
"frameworks": {
"netstandard1.3": {
"imports": "dnxcore50"
}
}
}
引用的NewtonSoft.JSON包在此处部署:
C:\ Users \ UserAccount \ .nuget \ packages \ Newtonsoft.Json \ 9.0.1
例外情况:
DotNetConsoleApplication.exe中出现未处理的类型'System.IO.FileNotFoundException'异常附加信息:无法加载文件或程序集'Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖 . 该系统找不到指定的文件 .
我想.net核心lib会引用netstandard1.0文件夹中的dll .
5 回答
创建NuGet包是一个解决方案,但不是最简单的解决方案 .
微软最终承认这是一个问题,并且预计会在NuGet 4.0.1版本中出现,这是VS 2017发布后对NuGet 4的第一次更新 .
现在最干净的解决方法是将
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
添加到旧项目中 . 但是,according to Rob Relyea MS将在RTM之后忽略此属性,因此另一种解决方法是<PackageReference Update="PlaceholderToConvinceThisProjectToGetTransitivePackageReferenceFromProjectReferences"/>
.Solved 31.07.2016
创建一个新的普通.NET控制台应用程序(不是.NET Core)和.NET Core类库,而不事先在它们之间进行任何引用 .
Scenario:
1.基于.NET 4.6的控制台应用程序,它引用了一个
2. .Net Core Classlibrary(参考Newtonsoft.JSON v9.01)
.NET核心类库配置如下(project.json):
解决方案
1.) Create a Nuget package from the .Net core class library project first.
以admin身份打开命令行 . 转到(cd).NET核心类库项目(.xproj)的项目文件夹 .
运行以下命令:
dotnet pack
“pack”参数将从.NET Core类库中创建一个nuget包,并将包复制到debug / release文件夹,具体取决于您的项目配置 .
将nuget包文件复制到 folder where you host your local nuget packages . 我把它们复制到:
Screenshot:
2.) If you don't have a local Nuget feed,you have to create one first!
本地Nuget文件夹(我将其命名为“LocalPackages”)将托管您的自定义Nuget包 . 本地Nuget Feed将指向“LocalPackages”,它是所有本地包的根文件夹 .
在创建本地nuget提要并将localnetack文件夹下的.net核心类库的nuget包复制后,就可以安装.net核心类库nuget包了 .
3.) Install the .NET Core library Nuget Package into the .NET console app
您现在必须再次打开包管理器控制台 . 选择包源:本地包(这是我的本地提要名称,可能不同) . 默认项目应该是您的.NET控制台应用程序 .
在我的情况下,将.net核心类库nuget包安装到控制台应用程序中:
而已 !
My system :
可能是Newtonsoft程序集是64位而你的.Net Core项目是32位 . 也可能是你引用了多个版本的Newtonsoft .
在dotnet核心控制台应用程序中包含Newtonsoft.Json 6.0.8后,我最近遇到了同样的错误 . 解决方案是将System.Runtime.Serialization.Primitives依赖包含在project.json配置中 .
As a workaround solution ,在Visual Studio 2017中,您可以将NetStandard项目.csproj修改为多目标:
重建解决方案,引用的dll(NewtonSoft.JSON)将被复制到控制台项目的bin文件夹中 .
看看我的实现:Workaround Solution