(VS2015 Update 3 + Patch)
我有一个普通的.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:\用户\ UserAccount \ .nuget \包\ Newtonsoft.Json \ 9.0.1
例外:
“System.IO.FileNotFoundException”类型的未处理异常 发生在DotNetConsoleApplication.exe
中其他信息:无法加载文件或程序集 'Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖项。该 系统找不到指定的文件。
我想.net核心lib会引用netstandard1.0文件夹中的dll。
答案 0 :(得分:4)
创建NuGet包是一个解决方案,但不是最容易的解决方案。
微软最终承认这是一个问题,而且will fix预计会在NuGet 4.0.1版本中出现,这是VS 2017发布后对NuGet 4的第一次更新。
现在最简洁的解决方法是将<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
添加到旧项目中。但是according to Rob Relyea MS会在RTM之后忽略此属性,因此另一种解决方法是<PackageReference Update="PlaceholderToConvinceThisProjectToGetTransitivePackageReferenceFromProjectReferences"/>
。
答案 1 :(得分:2)
解决了31.07.2016
创建一个新的普通.NET控制台应用程序(不是.NET Core)和.NET Core类库,而不事先在它们之间进行任何引用。
的方案:强>
1.基于.NET 4.6的控制台应用程序,引用了一个
2. .Net Core Classlibrary(引用Newtonsoft.JSON v9.01)
.NET核心类库配置如下(project.json):
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.6.0",
"Newtonsoft.Json": "9.0.1"
},
"buildOptions": { "platform": "anycpu" },
"frameworks": {
"netstandard1.3": {
"imports": "dnxcore50"
}
}
}
1。)首先从.Net核心类库项目创建一个Nuget包。
以管理员身份打开命令行。
转到(cd).NET核心类库项目(.xproj)的项目文件夹。
运行以下命令:
dotnet pack
“pack”参数将从.NET Core类库中创建一个nuget包,并将包复制到debug / release文件夹,具体取决于您的项目配置。
将nuget包文件复制到托管本地nuget包的文件夹。 我已将它们复制到:
<强> C:\用户\ Admin.nuget \包\ LocalPackages 强> \ NetCore46ClassLibrary
的截图:强>
2。)如果您没有本地Nuget Feed,则必须先创建一个!
本地Nuget文件夹(我将其命名为“LocalPackages”)将托管您的自定义Nuget包。本地Nuget Feed将指向“LocalPackages”,它是所有本地包的根文件夹。
创建本地nuget订阅源并将.net核心类库的nuget包复制到localPackages文件夹下的某个位置后,即可安装.net核心类库nuget包。
3.。)将.NET Core库Nuget Package安装到.NET控制台应用程序
您现在必须再次打开包管理器控制台。 选择包源:本地包(这是我的本地提要名称,可能不同)。 默认项目应该是您的.NET控制台应用程序。
在我的情况下将.net核心类库nuget包安装到控制台应用程序中:
install-package NetCore46ClassLibrary
就是这样!
dotnet --version
1.0.0-preview2-003121
答案 2 :(得分:1)
可能是Newtonsoft程序集是64位而你的.Net Core项目是32位。也可能是你引用了多个版本的Newtonsoft。
答案 3 :(得分:1)
最近我在dotnet核心控制台应用程序中包含Newtonsoft.Json 6.0.8后出现了同样的错误。解决方案是将System.Runtime.Serialization.Primitives依赖包含在project.json配置中。
{
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {
"System.Runtime.Serialization.Primitives": "4.0.10-*",
"Newtonsoft.Json": "6.0.8"
},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
},
"imports": "dnxcore50"
}
}
}
答案 4 :(得分:0)
作为解决方案解决方案,在Visual Studio 2017中,您可以将NetStandard项目.csproj修改为多目标:
<TargetFrameworks>netstandard1.3;net461</TargetFrameworks>
重建解决方案,引用的dll(NewtonSoft.JSON)将被复制到控制台项目的bin文件夹中。
中查看我的实施情况