我在启用可为 null 的项目中使用 .net 5 作为 Blazor 应用程序。它使用代码隐藏来创建 Blazor 组件。我想使用构造函数,这样我就可以避免将每个非 DI 属性标记为可为空,以简化在 blazor 代码中对它们的访问。但是,如果我创建一个像这样的构造函数
public PageNumberOne(ILogger<PrimaryItem> logger) {}
我收到错误MissingMethodException: 没有为类型定义无参数构造函数
如果我在 DI 项上使用注入属性,则会收到警告 -当激发构造函数时,不可为空的属性 _logger 必须包含非空值
那么如何将 DI 与可为 null 混合,而不只是将每个属性标记为可为 null?
我还可以在“代码”块的主体中创建它们,但随后我无法访问我的 DI 项进行初始化,因为它们在 OnInitialized 之前不可用。所以我必须再次将它们标记为可为空。
我想更新我的软件包,但我遇到了一些这样的错误:
错误是:
错误 NU1202 Package Microsoft.EntityFrameworkCore.Sqlite 5.0.0-rc.1.20451.13 与 net50 (.NETFramework,Version=v5.0) / win7-x86 不兼容。包 Microsoft.EntityFrameworkCore.Sqlite 5.0.0-rc.1.20451.13 支持:netstandard2.1 (.NETStandard,Version=v2.1) API E:...\API\API.csproj 1
API.csproj 文件:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.0.1" />
<PackageReference Include="CloudinaryDotNet" Version="1.11.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.7" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.0-preview.8.20414.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.0-preview.8.20407.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-preview.8.20407.4" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.0-preview8" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.7.1" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
C:\WINDOWS\system32>dotnet --info .NET SDK(反映任何 global.json):
版本:5.0.100-rc.1.20452.10
提交:473d1b592e运行时环境:
操作系统名称:Windows
操作系统版本:10.0.17763 操作系统平台:Windows …
借助 Visual Studio,我可以调试在 Windows 和 WSL 2 中运行的 .NET Core 应用程序。对于 WSL 2,我使用此扩展。这工作正常。我还可以在 Windows 中调试我的单元测试。这也工作得很好。但是,我不知道如何使用在 WSL 2 中运行的 Visual Studio 来调试我的单元测试。我希望有人可以帮助我并解释我如何不仅可以调试 WSL 2 中的控制台应用程序和 Web 应用程序,还可以调试我的单元测试。请告诉我。
visual-studio .net-core windows-subsystem-for-linux .net-5 wsl-2
大家好,我遇到了一个错误,我正在尝试解决它,我找到了一些类似的来源,但无法解决我的问题。类似的问题就像这里。
我.csproj
使用.bat
文件编译我的项目文件,实际上它是.batch
来自cmd
. 但我收到了这个错误:
error MSB3823: Non-string resources require the property GenerateResourceUsePreserializedResources to be set to true. [C:\Users\rmrud\source\Workspaces\Workspace2\HAL9\v3_07\Test\Test\Test.csproj]
我也得到了这个:
error MSB3822: Non-string resources require the
System.Resources.Extensions assembly at runtime, but it was not found in this project's references. [C:\Users\rmrud\source\Workspaces\Workspace2\HAL9\
v3_07\Test\Test\Test.csproj]
Run Code Online (Sandbox Code Playgroud)
我也在 cmd 中运行了这个choco install visualstudio2019-workload-netcoretools
。
我编辑了我的.csproj
文件,在您的文件中添加了这些 xml 节点xxx.csproj
:
<PropertyGroup>
<GenerateResourceMSBuildArchitecture>
CurrentArchitecture
</GenerateResourceMSBuildArchitecture>
<GenerateResourceMSBuildRuntime>
CurrentRuntime
</GenerateResourceMSBuildRuntime>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
然后我再次使用 cmd 中的 bat 文件进行编译,但仍然出现构建错误。如何克服这个问题提前致谢。请注意,在我的机器中,我使用的是 .NET Framework 版本 4.8 …
我目前正在尝试在 Visual Studio 2019 中创建一个 C# .NET 5.0 控制台应用程序,并且该选项没有像我期望的那样出现在项目模板下。
我下载了 Visual Studio Professional 2019 版本 16.9.4(来自https://visualstudio.microsoft.com/downloads/)并选择了要安装的所有工作负载,然后我安装了 SDK 5.0.202、ASP.NET Core Runtime 5.0.5, .NET 桌面运行时 5.0.5 和 .NET 运行时 5.0.5(来自https://dotnet.microsoft.com/download/dotnet/5.0)。
当我转到 File -> New -> Project 并搜索“Console Application”时,C# 没有默认的“Console Application”项目模板。我能找到的最接近的是 C#、VB 和 F# 的“控制台应用程序(.NET 框架)”和 C++ 的“控制台应用程序”。如果我为 C# 选择“Console Application (.NET Framework)”,我可以选择的最新框架是“.NET Framework 4.8”。
实际成果:项目模板
实际结果:框架
我和一个没有遇到这个问题的开发者对比了笔记,他们在为C#选择“Console Application (.NET Framework)”时看到同样的框架限制,但也能看到“Console Application”的项目模板“Console Application” C#(不带“.NET Framework”)并按预期选择“.NET 5.0(当前)”作为目标框架。他们安装和更新的内容似乎没有明显不同,我们对命令提示符命令“dotnet --info”的结果匹配,并且他们在“关于”或“单个组件”下没有列出任何“已安装的产品”我缺少的安装程序。
预期成果:项目模板
预期成果:框架
我尝试卸载并重新安装所有内容,彻底安装每个工作负载以及看起来可能相关的其他单个组件,并确保“工具 -> 选项 -> 环境 -> 预览功能 -> 在新项目对话框(需要重新启动)”复选框被选中。
有谁知道我错过了哪一步阻止我使用 …
我发现在接口和另一个派生类之间插入一个类会导致调用接口的默认实现而不是同一方法的派生实现。这是意料之外的行为。为什么会这样?
我创建了一个重现问题的示例项目:
public interface IPrinterInterface
{
public void PrintIt() => Console.WriteLine("Interface");
}
public class MiddlePrinter : IPrinterInterface{}
public class Printer : MiddlePrinter
{
public void PrintIt() => Console.WriteLine("Class");
}
class Program
{
static void Main(string[] args)
{
var printer = (IPrinterInterface)new Printer();
printer.PrintIt(); // This prints "Interface"
Console.ReadLine(); // so the app sits
}
}
Run Code Online (Sandbox Code Playgroud)
此代码导致Interface
被打印出来。
相比之下,如果从继承中移除 MiddlePrinter 类(如下面的代码所示),则代码打印“Class”:
public interface IPrinterInterface
{
public void PrintIt() => Console.WriteLine("Interface");
}
public class Printer : IPrinterInterface
{
public …
Run Code Online (Sandbox Code Playgroud) 我有一台开发机器
我安装了 net plataform sdk 5.0 来运行 Fluid UI 桌面应用程序(使用 C#)。当我创建并运行一个空白模板项目时,出现错误 MSB3644
错误 MSB3644 未找到 .NETFramework,Version=v5.0 的参考程序集。要解决此问题,请为此框架版本安装开发人员包(SDK/目标包)或重新定位您的应用程序。您可以在https://aka.ms/msbuild/developerpacks WinUIdesktop2 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion下载 .NET Framework 开发包。目标 1177
在我的命令行上,我检查了使用dotnet --list-sdks安装的平台 SDK
C:\Users\my_profile>dotnet --list-sdks
2.1.201 [C:\Program Files\dotnet\sdk]
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.402 [C:\Program Files\dotnet\sdk]
2.1.403 [C:\Program Files\dotnet\sdk]
2.1.504 [C:\Program Files\dotnet\sdk]
2.1.602 [C:\Program Files\dotnet\sdk]
2.1.700 [C:\Program Files\dotnet\sdk]
2.1.802 [C:\Program Files\dotnet\sdk]
3.1.401 [C:\Program Files\dotnet\sdk]
5.0.100-preview.5.20279.10 [C:\Program Files\dotnet\sdk] …
Run Code Online (Sandbox Code Playgroud) 直到最近,我们的 .Net Core 3.1 应用程序还在 Azure 管道上构建和发布良好。但是在过去的几天里,构建管道开始失败并出现错误:
##[error]C:\Program Files\dotnet\sdk\5.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(241,5):
Error NETSDK1005: Assets file 'D:\a\1\s\ProjectFolder\src\Project\obj\project.assets.json' doesn't have a target for 'netcoreapp3.1'.
Ensure that restore has run and that you have included 'netcoreapp3.1' in the TargetFrameworks for your project.
Run Code Online (Sandbox Code Playgroud)
(ResolvePackageAssets target) ->
C:\Program Files\dotnet\sdk\5.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(241,5):
error NETSDK1005: Assets file 'D:\a\1\s\ProjectFolder\src\Project\obj\project.assets.json' doesn't have a target for 'netcoreapp3.1'.
Ensure that restore has run and that you have included 'netcoreapp3.1' in the TargetFrameworks for your project. [D:\a\1\s\ProjectFolder\src\Project\Project.csproj]
Run Code Online (Sandbox Code Playgroud)
对于失败的解决方案构建步骤,构建管道设置如下。
任何想法如何以最少的更改解决此问题?
我已经这样做了:
services.Configure<ApplicationSettings>(_configuration.GetSection("ApplicationSettings"));
Run Code Online (Sandbox Code Playgroud)
我以为这会让我注射ApplicationSettings
,但显然不行。
我可以将GetSection(...)
其注册为单例,但是那有什么意义呢.Configure
?
msdn 文档说“注册 TOptions 将绑定的配置实例,并在配置更改时更新选项。”
不过,目前尚不清楚如何设置模式以在我的应用程序中使用配置作为 DI。
这是我试图实现的SO问题:
最近微软发布了.NET 5。如果我们想将.NET Framework 4.8 升级到.net 5 那么我们如何完成这个任务。
请注意 :
我已经使用所有最新组件和 .net Framework 5 升级了 Visual Studio 18.2。但在项目属性中未显示 .net 5。
我的应用程序在 .net Framework 中而不是在 .net core 中。
2021 年 2 月 2 日更新 我在 Microsoft 论坛上发布了同样的问题,幸运的是他们的回答非常积极。
2021 年 8 月更新
来自微软的消息
我们将继续通过在 GitHub 存储库中发布的预览来改进 .NET 升级助手。你可以在这里找到它:https : //github.com/dotnet/upgrade-assistant
快乐升级!
.net-5 ×10
c# ×6
.net-core ×4
.net ×1
asp.net ×1
azure-devops ×1
batch-file ×1
blazor ×1
interface ×1
nuget ×1
windows-subsystem-for-linux ×1
wsl-2 ×1