kh2*_*h25 7 .net c# .net-core .net-4.6
我一直在研究可用于在新的.NET Core App项目中引用现有.NET Framework 4.6库的选项.
作为概念验证,我构建了一个非常简单的.NET Framework 4.6库,将其作为NuGet包发布,并将其包含在一个简单的.NET Core Web应用程序中.
到目前为止,我似乎能够让项目构建和运行的唯一方法是从project.json依赖项块中删除Microsoft.NETCore.App引用,并使用net461块替换frameworks属性中的netcoreapp1.0部分.
完整的project.json如下:
{
"dependencies": {
/*"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},*/
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"FileIOLibrary_1_0_0_0": "1.0.0"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
/*"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8",
"net461"
]
}
},*/
"frameworks": {
"net461": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
Run Code Online (Sandbox Code Playgroud)
这基本上意味着所有引用都是.NET Framework 4.6库.
无论如何,我有几个关于我可用的其他选项的问题:
我担心你无法将.NET 4.6.2 DLL加载到.NET Core应用程序中.
在某些情况下,您可以编写一次代码,然后创建.NET 4.6.2项目和.NET Core项目.两个项目都指向相同的代码文件,但每个项目都有不同的框架目标.一旦你有了这个工作,你可以构建一个nuget包,其中包含.NET 4.6.2 DLL 和 .NET Core DLL,这将使部署和构建更加简单.
假设你有一个MyProject.csproj文件夹./NET462/MyProject/和解决方案MySolution.sln.
MyProject.Core,我们会把它放进去./Core/MyProject.Core/.我们也会有一个解决方案,称之为./Core/MySolution.Core.sln../NET462/MyProject/到./Core/MyProject,包括.csproj.复制解决方案,他们将并排生活.MyProject.project.json.这在加载.NET 462项目时充当project.json的伴侣.将以下内容放入其中:MyProject.project.json
{
"version": "1.0.0-*",
"description": "My Class Library",
"authors": [
"Your Name"
],
"tags": [
""
],
"projectUrl": "",
"licenseUrl": "",
"runtimes": {
"win": {}
},
"frameworks": {
"net452": {} // You might want net462
},
"dependencies": {
"Newtonsoft.Json": "9.0.1" /// Just an example of a nuget package
}
}
Run Code Online (Sandbox Code Playgroud)
.csproj和MyProject.project.json.创建一个package.nuspec文件并将以下内容放入其中:
<!-- language: lang-xml -->
<?xml version="1.0"?>
<package>
<metadata>
<id>MyProject</id>
<version>1.0.0</version>
<authors>Me</authors>
<owners>Me</owners>
<projectUrl></projectUrl>
<iconUrl>FILL ME IN</iconUrl>
<description>FILL ME IN</description>
<copyright>FILL ME IN</copyright>
<releaseNotes>First attempt</releaseNotes>
<tags>FILL ME IN</tags>
<dependencies>
<group targetFramework="dotnet">
<dependency id="Newtonsoft.Json" version="9.0.1" />
</group>
<group targetFramework="net452">
<dependency id="Newtonsoft.Json" version="9.0.1" />
</group>
</dependencies>
<frameworkAssemblies>
<frameworkAssembly assemblyName="System.Core" targetFramework="net452"/>
<frameworkAssembly assemblyName="System.Core" targetFramework="dotnet" />
</frameworkAssemblies>
</metadata>
<files>
<file src="Core\MyProject\bin\release\MyProject.dll" target="lib/net452" />
<file src="Core\MyProject\bin\release\MyProject.Core.dll" target="lib/dotnet" />
</files>
</package>
Run Code Online (Sandbox Code Playgroud)使用它来构建您的nuget包,当包含在您的主系统中时,nuget将提供正确的包.
我的JsonApi库执行此操作,此外它还有两个Web项目,一个用于.NET 4.6.2,另一个用于.NET Core,因为它们使用不同的基类.两者都使用主共享库.
.NET 4.6.2所依赖的某些库将无法用于您的Core应用程序.这两次我做到了这一直是System.Web我抓住了我.System.Web在.NET 4.6.2中,它实际上是IIS的包装器.找出最好的方法是尝试合并上面的项目并继续添加nuget包,project.json直到你遇到Core不存在的东西.
2016年5月的.NET团队表示他们正在project.json逐渐停止使用2016年底.在这一点上,我想这些问题可能会消失,因为视觉工作室应该能够.csproj并排处理两种生活方式.根据您的商业情况,我会等待改变!
| 归档时间: |
|
| 查看次数: |
2473 次 |
| 最近记录: |