我想用Target Framework .NET Standard 2.0创建一个类库项目.
我已经更新了我Visual Studio 2017
的版本15.3
,并在Visual Studio安装程序中检查.NET Framework 4.7 SDK
并.NET Framework 4.7 targeting pack
手动安装它们.
.NET Standard 2.0
"项目/应用程序"窗口中的"目标框架"组合框中仍然没有选项.所以我.csproj
手动将文件中的TargetFramework标记更改为netstandard2.0
,但在尝试构建后,我收到此错误:
当前的.NET SDK不支持以.NET Standard 2.0为目标.要么是.NET Standard 1.6或更低版本,要么使用支持.NET Standard 2.0的.NET SDK版本.
我有一个.NET Framework 4.6.1 WebApi项目,该项目引用了我们在内部用于共享常用实用程序方法的小型NuGet包.
我们想开始将一些东西移植到.NET Core,因此我将实用程序包更改为目标.NET Standard 2.0.这是通过简单地创建一个新的.NET Standard 2.0项目并复制源文件来完成的.
实用程序包csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
在我的WebApi项目中更新包后,我在启动时收到以下异常:
[MissingMethodException: Method not found: 'System.Collections.ObjectModel.Collection`1<System.Net.Http.Headers.MediaTypeHeaderValue> System.Net.Http.Formatting.MediaTypeFormatter.get_SupportedMediaTypes()'.]
MyWebApiProject.Application.InitializeHttpConfiguration(HttpConfiguration config) in C:\MyWebApiProject\Global.asax.cs:44
System.Web.Http.GlobalConfiguration.Configure(Action`1 configurationCallback) +34
MyWebApiProject.Application.OnApplicationStarted() in C:\MyWebApiProject\Global.asax.cs:62
Ninject.Web.Common.NinjectHttpApplication.Application_Start() +183
[HttpException (0x80004005): Method not found: 'System.Collections.ObjectModel.Collection`1<System.Net.Http.Headers.MediaTypeHeaderValue> System.Net.Http.Formatting.MediaTypeFormatter.get_SupportedMediaTypes()'.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +10104513
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +173
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296
[HttpException (0x80004005): Method not found: 'System.Collections.ObjectModel.Collection`1<System.Net.Http.Headers.MediaTypeHeaderValue> System.Net.Http.Formatting.MediaTypeFormatter.get_SupportedMediaTypes()'.] …
Run Code Online (Sandbox Code Playgroud) 我想知道我是否可以轻松地在.NET Standard 2.0项目中设置我的EntityFrameworkCore.我正在阅读本教程,但它需要.NET Core或Framework.
当我到达这一步时:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
启动项目'projectName'的目标是框架'.NETStandard'.没有与此框架关联的运行时,并且无法直接执行以其为目标的项目.要将Entity Framework核心软件包管理器控制台工具与此项目一起使用,请添加一个针对引用此项目的.NET Framework或.NET Core的可执行项目,并将其设置为启动项目; 或者,更新此项目以跨目标.NET Framework或.NET Core.
我想知道我是否可以在.NET Standard中设置我的实体,或者是否有我应该做的最佳实践?
我有一个在NetStandard2.0中创建的程序集.它使用System.Configuration.ConfigurationManager读取AppSettings .我安装了版本为4.4.X的System.Configuration.ConfigurationManager的 nuget包,适用于NetStandard2.0.
当我在控制台应用程序(.Net Core)中引用此程序集时,它正在正确读取AppSettings,但是当我在旧的.NetFramework(4.6.X)控制台应用程序中引用此程序集时,它无法正常工作并抛出异常.
请参阅下面的代码.
程序集1:NetStandard 2.0
Nuget:System.Configuration.ConfigurationManager 4.4.0
using System.Configuration;
namespace Bootstrapper.Lib
{
public class Bootstrapper
{
public Bootstrapper()
{
}
public void LoadAppSettings()
{
string serachPattern=
ConfigurationManager.AppSettings["AssemblySearchPattern"];
}
}
}
Run Code Online (Sandbox Code Playgroud)
控制台应用程序:NetFx 4.6.X
using System;
using Bootstrapper.Lib;
namespace Bootstrapper.Console
{
class Program
{
static void Main(string[] args)
{
new Bootstrapper().LoadAppSettings();
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行后的异常:
'Could not load file or assembly 'System.Configuration.ConfigurationManager,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one
of its dependencies. …
Run Code Online (Sandbox Code Playgroud) 我越来越
无法为'.NETStandard,Version = v2.0'解析'NETStandard.Library(> = 1.6.1)'.
在我将aspnetcore应用程序升级到netcoreapp2.0
我的库并使用之后,使用Hosted2017构建代理构建VSTS netstandard2.0
.
在当地工作正常.
我编辑了我的构建定义以使用.net核心构建任务v2.* preview
:
这是构建日志:
Current agent version: '2.120.2'
Download all required tasks.
Downloading task: DotNetCoreCLI
Starting: Get Sources
Syncing repository: Liero/vyvojari-sk (GitHub)
...details ommited
HEAD is now at e448a25... Upgraded to .NET Core 2.0
Finishing: Get Sources
Starting: Restore
==============================================================================
Task : .NET Core
Description : Build, test, package, or publish a dotnet application, or run a custom dotnet command. For package commands, supports NuGet.org and authenticated …
Run Code Online (Sandbox Code Playgroud) .net-core azure-devops azure-pipelines .net-core-2.0 .net-standard-2.0
我有一个.NET Standard 2.0类库项目,安装了Nuget包System.Data.SqlClient版本4.4.0和一个Windows Form .NET Framework 4.7项目,该项目引用了该类库.
安装Nuget Package并构建解决方案是成功的.但在运行时,每次代码到达一个方法,其中包含SqlClient程序集中的任何东西(例如来自SqlConnection的实例),它会收到此错误:
无法加载文件或程序集'System.Data.SqlClient,Version = 4.2.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.
考虑到这个问题,我认为问题也出现在Nuget包的最后一个主要版本中.
编辑
我下载了Nuget软件包并解压缩,并从\ ref \netstandard2.0文件夹中手动复制了System.DataSqlClient.dll在我的Windows窗体项目的\ bin\Debug文件夹中,现在它可以工作了.Microsoft.Win32.Registry包也发生了确切的情况.所以我几乎确信这是我的错,而且我正在以错误的方式做某事,但是当我使用System.Drawing.Primitive Package进行测试时,它完美无缺,无需复制dll.现在我真的很困惑.
我对我的ASP.NET Core 2.0项目中的所有.NET Standard 2.0类库使用System.Data.SqlClient V4.4.3.我为什么得到
无法加载文件或程序集'System.Data.SqlClient,Version = 4.2.0.2,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
使用VSTS将项目发布到Azure App Service时?当然,它完全适用于我的机器!
这一切都在昨天奏效.但今天我决定将软件包更新为:
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.3" />
Run Code Online (Sandbox Code Playgroud) c# azure-web-sites azure-devops asp.net-core-2.0 .net-standard-2.0
我正在将库从 .NET Framework 4.6.1 移植到 .NET Standard 2.0。在 Framework 中,NamedPipeServerStream
构造函数可以接受PipeSecurity
参数,但这在 Core 中不是一个选项。Core中如何设置a的安全性NamedPipeServerStream
?
我正在使用Visual Studio for Mac
,我的应用程序是写的,它做我想要的.用户的目标平台是OSX.它依赖于2个具有自己依赖关系的Nuget包,具体来说:
我运行以下命令到build
应用程序:
dotnet build -c Release -r osx.10.11-x64
Run Code Online (Sandbox Code Playgroud)
输出告诉我它成功并显示我放置文件的位置.
包含在该文件夹中的是以下文件,这个文件夹是我假设我分发给我的用户,但这会导致错误,因此这个问题:
MyApp <---- executable
MyApp.deps.json
MyApp.dll
MyApp.pdb
MyApp.runtimeconfig.dev.json
MyApp.runtimeconfig.json
libhostfxr.dylib
libhostpolicy.dylib
Run Code Online (Sandbox Code Playgroud)
所以我的用户收到了这个,他们已经dotnet
安装了运行时.当他们去运行可执行文件(这里MyApp
也称为./MyApp
)时,他们会收到以下错误:
An assembly specified in the application dependencies manifest (MyApp.deps.json) was not found:
package: 'AsyncIO', version: '0.1.26'
path: 'lib/netstandard1.3/AsyncIO.dll'
Run Code Online (Sandbox Code Playgroud)
现在,AsyncIO
是一个依赖,NetMQ
所以它来自哪里.但是,我可以./MyApp
从我的文件系统的任何地方,它的工作原理.因此,我认为我的系统上安装的Nuget软件包作为开发系统仍然可以访问,而新用户的系统则不然.我还没有找到任何与Mac发行有关的文档.我现在唯一能想到的就是分发项目文件,并指示用户运行:
dotnet run -p MyApp.csproj
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,将安装nuget包.
我也可以让用户使用:
dotnet MyApp.dll
Run Code Online (Sandbox Code Playgroud)
我在google搜索中看到了这种形式.这引起了他们的质疑,但是为什么会生成可执行文件.乞丐不能选择,如果这样做dotnet <dll>
我很开心,我只需要让它运行.
我必须在这里找到一些东西,否则netcore2.0应用程序的这个细节,分布只是被忽略了?
在挖掘更多这个似乎也是一个有用的命令:
dotnet publish -c Release --framework …
Run Code Online (Sandbox Code Playgroud) 在Windows上,对于.NET Framework类,我们可以指定sslkeyrepository
为*SYSTEM/*USER.On 默认情况下linux
.NET Core类在哪里搜索,certificates
以及可能是什么值sslkeyrepository
.