我正在用Blazor Asp.NET Core3.1和所有酷的新的闪亮的奇特的东西开始一个新的项目。但是对于客户端的一个接口,我仍然需要一个支持WCF的解决方案,从而支持net framework 4.8。
因此,如果我将我的api项目(目前为止是net标准2.0)设置为net标准2.1,我会得到错误: Net Framework不支持netstandard 2.1。
问题1:有没有办法在net framework中仍然支持可以为空的类型?问题2:如果不是这样的话:除了我的新的net标准2.1项目之外,我是否可以创建第二个net标准2.0项目,它仍然支持旧的net framework,并将不可为空的类型编译为可以由Net Framework加载的程序集?然后,我可以为我的WCF服务使用非net all all netcore项目和net Standard 2.0版本。
问题3:有更好的想法吗?
发布于 2019-11-29 20:56:00
编辑:感谢@JohnSkeet指出了一个更简单的解决方案:
用TargetFrameworks替换Net标准库的csproj中的TargetFramework
<TargetFrameworks>net461;netstandard2.1</TargetFrameworks>信息: Net461是第一个支持Net Standard 2.0库的netFramework版本。
如果您需要特定于net framework或netcore的引用,您可以在您的csproj文件https://github.com/googleapis/gax-dotnet/blob/8c5682ad53f5d93716df5ab762c6ce4790edad72/Google.Api.Gax/Google.Api.Gax.csproj#L25中使用MS Build操作
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<Reference Include="System.Net.Http" />
</ItemGroup>下面使用我的旧解决方案的唯一原因是,如果您确定只想使用Visual Studio UI,而不是使用自定义引用或NuGetPackages的文本编辑器修改csproj。
感谢问候迈克尔
旧解决方案
你好,我想我找到了我的问题的解决方案:
创建名为MyLibrary.Api的共享项目(由于同一文件夹中的.NET标准2.0和.NET标准2.1项目导致错误,因此共享项目应具有根命名空间的名称,由于共享项目不能具有默认命名空间,并且所有新文件都会将项目的名称作为namespace.
用于测试的:
添加和参考MyLibrary.Api.Core.
现在激活C# 8.0
现在,在.csproj文件中的所有项目(除了MyLibrary.Api共享项目)中,添加到第一个PropertyGroup LangVersion和Nullable (Nullable不是必须的,默认情况下它只是打开了nullable类型,如果您不添加它,您需要在每个代码文件中添加#nullable启用):
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
...在.NET框架项目中,我使用LangVersion添加了一个新的PropertyGroup部分,但我认为这不是必需的。
希望这也能帮助到其他人。
我的解决方案适用于那些想要在.net核心项目中使用NetStandard 2.1的优点,但仍然想要在.NET框架中使用某个版本的库,甚至可以在.NET框架中使用可空类型的人。
同样,通过这种方式,您可以编译两个dll。一个用于NetFramework,另一个用于NetStandard 2.1中的.NET核心
https://stackoverflow.com/questions/59102179
复制相似问题