我正在使用Blazor Asp.NET Core 3.1和所有很酷的新功能来启动一个新项目。但是对于与客户端的一个接口,我仍然需要一种支持WCF并因此支持Net Framework 4.8的解决方案。
因此,如果我将api Project(到目前为止的net standard 2.0)设置为net standard 2.1,则会收到错误消息Net Framework不支持netstandard 2.1。
问题1:有没有办法在网络框架中仍然支持可空类型? (或者是在网络核心中支持wcf的可行方法-我需要wcf,因为我需要一个托管的库)问题2:如果不是:除了可以支持旧Net Framework并将非空类型编译为可以由Net Framework加载的程序集的新Net standard 2.1项目之外,我可以创建第二个Net Standard 2.0项目吗?然后,我可以为我的WCF服务使用Non-Nullable Libary所有netcore项目和net Standard 2.0版本。
问题3:一些更好的主意?
编辑:感谢@JohnSkeet指出了一个更简单的解决方案:
用NetFrame标准库替换csproj中的TargetFramework和TargetFramework s
<TargetFrameworks>net461;netstandard2.1</TargetFrameworks>
信息:Net461是第一个支持Net Standard 2.0库的netFramework版本。
如果您需要net框架或netcore特定的引用,您可以像他指出的那样在csproj文件中使用MS Build Actionshttps://github.com/googleapis/gax-dotnet/blob/8c5682ad53f5d93716df5ab762c6ce4790edad72/Google.Api.Gax/Google.Api.Gax.csproj#L25
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<Reference Include="System.Net.Http" />
</ItemGroup>
以下是唯一的原因,如果您死定了,则只使用Visual Studio UI,而不用带有文本编辑器的csproj来修改自定义引用或NuGetPackages,如果您已死定,则使用我的旧解决方案。
感谢Michael的问候
旧解决方案
您好,我想我找到了解决问题的方法:
共享项目也应具有根名称空间的名称,因为共享项目不能具有默认名称空间,并且所有新文件都将项目名称作为名称空间。
添加.Net标准类库MyLibrary.Api.Core
Add-Reference-> Shared Projects下的Reference MyLibary.Api,现在在编译时,共享项目的所有文件都被编译成MyLibrary.Api.Core。
添加.Net标准类库MyLibrary.Api.NetFramework
用于测试:
现在激活C#8.0
现在,.csproj文件中的所有项目(MyLibrary.Api共享项目除外)都添加到第一个PropertyGroup LangVersion和Nullable(Nullable不是必需的,它默认情况下仅打开可为null的类型,如果不添加它,则为需要添加每个已启用#nullable):
的代码文件<PropertyGroup> <LangVersion>8.0</LangVersion> <Nullable>enable</Nullable> ...
在.NET Framework项目中,我用LangVersion添加了一个新的PropertyGroup部分,但我认为这不是必需的。
希望这对其他人也有帮助。
我的解决方案,那些想要为他们的.net核心项目使用NetStandard 2.1优势,但仍然希望在.NET Framework中使用该库的版本,甚至可以在.NET Framework中使用可空类型的人。
也通过这种方式,您可以编译两个dll。在NetStandard 2.1中,一个用于NetFramework,一个用于.NET Core。