小编nal*_*lka的帖子

C# v10 全局 using 声明的文件名约定

C# 开发社区对于声明全局 using 语句的 .cs 文件名是否达成共识?

我本来打算采用文件名 GlobalUsings.cs,但随后发现 VS2022 工具链在幕后创建了一个名为 MyProject.GlobalUsings.g.cs 的隐藏文件。这是为了支持称为隐式全局 using 指令的相关新 C# 10 功能。

Blazor 支持 .razor 文件的类似功能,并且 Blazor 解决方案模板会自动创建一个名为 _Imports.razor 的文件。该名称源自 Razor 语法,用于声明 using 引用。

using-directives naming-conventions c#-10.0

8
推荐指数
1
解决办法
1016
查看次数

Visual Studio 2017 的托管包框架

我正在关注本教程,了解如何创建新的 Visual Studio 项目类型。其中显示“导入托管包框架的源代码文件”。Google 引导我找到此链接,其中包含 MPF 2013 套餐的链接。在第一个链接中,他们说要查找ProjectBase.files第二个链接下载中不存在的文件。

问题:

  1. Visual Studio 2017 的正确 MPF 下载在哪里?
  2. 将来当我们转向 Visual Studio 2019 时,我是否需要下载新的 2019 MPF?

c# mpf visual-studio-extensions

7
推荐指数
1
解决办法
567
查看次数

验证时如何清理 SimpleInjector 创建的实例?

作为创建我的 SimpleInjector 容器的一部分,我遵循了推荐的做法并调用container.Verify()以检查我的类型注册是否有意义。

这工作得很好,并且发现了我犯的许多错误 - 但它也会产生我想清理的碎片。

我的一个类是单例事件中心,用于在其他瞬态组件之间路由消息;这些其他组件在其构造函数中接受事件中心,创建订阅以接收他们有兴趣接收的消息,然后Dispose()在完成时创建订阅。

调用container.Verify()创建每种对象中的一个,导致大量这些其他瞬态实例徘徊,因为事件中心仍然知道它们的订阅。

目前,我通过Verify()在应用程序启动之前立即手动终止所有订阅来解决这个问题。然而,这感觉像是一个必须已经解决的问题,尽管我无法在文档、Stack Overflow 上或通过搜索找到答案。

也许使用有范围的生活方式是解决方案?它们似乎不相关,因为我正在构建 WPF 应用程序,但如果我知道答案,我就不会在这里问了!

1 月 12 日更新- 根据@steven 的要求,这里有一些代码来演示我的问题。

我尝试(但失败)用既可编译又足够短的内容来内联共享的东西来演示这个问题;相反,我展示了一些实际项目的代码摘录。如果您想查看整个内容,可以在 GitHub 上找到 WordTutor 项目

在我的应用程序的核心,我有一个单例IReduxStore<T>,它既封装了应用程序状态,又充当了一种事件中心。其他类订阅存储以便在应用程序状态更改时主动通知。

这是IReduxStore<T>,精简到必需品:

// IReduxStore.cs
public interface IReduxStore<T>
{
    T State { get; }
    void Dispatch(IReduxMessage message);

    IDisposable SubscribeToReference<V>(
        Func<T, V?> referenceReader,
        Action<V?> whenChanged)
        where V : class, IEquatable<V>?;
}
Run Code Online (Sandbox Code Playgroud)

订阅落实IDisposable作为确定性清理方便和习惯的方法时,不再需要预订。

商店注册为单例,绑定到特定类型的状态:

// Program.cs
container.RegisterSingleton<
    IReduxStore<WordTutorApplication>,
    ReduxStore<WordTutorApplication>>(); …
Run Code Online (Sandbox Code Playgroud)

c# wpf simple-injector .net-core

5
推荐指数
1
解决办法
289
查看次数

如何使 Roslyn Analyzer 项目成为可传递依赖项?

我有一个依赖于源生成器才能正常工作的库。在 中MyLibrary.csproj,我像这样引用生成器。

<ItemGroup>
  <ProjectReference 
        Include="..\MyLibrary.Generators\MyLibrary.Generators.csproj" 
        PrivateAssets="contentfiles;build"
        ReferenceOutputAssembly="false"
        OutputItemType="analyzer"/>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

我需要这个分析器引用是可传递的,即该引用的项目MyLibrary应该可以MyLibrary.Generators传递地获取分析器。

像这样的简单参考似乎没有参考分析器,只是 MyLibrary

<ProjectReference Include="..\MyLibrary\MyLibrary.csproj" />
Run Code Online (Sandbox Code Playgroud)

我想强调的是,我不是在寻找MyLibrary.Generators作为常规程序集参考使用的,而是作为Roslyn 分析器使用的,因此我的源代码生成器可以在编译期间按预期运行。

.net c# roslyn roslyn-code-analysis sourcegenerators

5
推荐指数
1
解决办法
265
查看次数

C# 8.0 基于输入类型的 switch 表达式

是否可以switch expression根据输入类型在 C# 8 中创建?

我的输入类如下所示:

public class A1
{
    public string Id1 {get;set}
}

public class A2 : A1
{
    public string Id2 {get;set}
}

public class A3 : A1
{
    public string Id3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我想根据输入类型运行不同势方法(A1A2,或A3):

var inputType = input.GetType();
var result = inputType switch
{
       inputType as A1 => RunMethod1(input); // wont compile, 
       inputType as A2 => RunMethod2(input); // just showing idea
       inputType as A3 => RunMethod3(input);

}
Run Code Online (Sandbox Code Playgroud)

但它不会工作。任何想法如何根据输入类型创建 …

c# c#-8.0

3
推荐指数
1
解决办法
369
查看次数