小编Har*_*rry的帖子

如何修改前一行控制台文本?

我想实现这样的目标:

Time consuming operation...OK
Another time consuming operation...
And another one, but it completed, so...OK
Run Code Online (Sandbox Code Playgroud)

我显示了3行文本,每行都与一个可以迟早结束的帖子相关.但如果第二个比第三个完成,我会得到这样的东西:

Time consuming operation...OK
Another time consuming operation...
And another one, but it completed, so...OKOK
Run Code Online (Sandbox Code Playgroud)

这当然是不可接受的.我知道如何回到当前的路线,但有没有办法上线?我发誓我已经在某个地方见过它,虽然它可能是一个Linux控制台:)

算了吧.见远程文件管理器!它适用于Windows控制台,甚至可以在PowerShell中运行!怎么做这样的东西?最酷的部分是退出后恢复控制台状态.所以也许我应该问 - 如何直接访问控制台缓冲区?我假设我需要一些本机代码来完成这个技巧,但也许还有另外一种方法吗?我想到每次更新清除控制台,但这似乎有点矫枉过正.或许它不是?它会眨眼吗?

c# console powershell

21
推荐指数
2
解决办法
2万
查看次数

BL0005 - 外部参数使用 - 为什么会出现警告?

BL0005:不应在其组件之外设置组件参数。

我在一个组件中有一个组件。当我的外部组件状态发生变化时,我想更新内部组件的状态。外部组件是一个自动完成实现,改变的状态是输入文本,内部组件是自动完成项目列表,准确地说是突出显示的部分。

所以我通过它的参数改变了内部组件的状态。我收到了这个警告。为什么?

顺便说一句,代码完全按照我的预期工作。状态已同步,我匹配的文本在所有自动完成项目中突出显示。

我的猜测是更改参数可能会导致组件重新呈现自身,在我的情况下,这是完全期望和预期的行为。否则我为什么要在运行时更改组件的参数?

我在网上搜索了警告,但除了那个警告之外我没有发现任何有用的东西:https : //github.com/aspnet/AspNetCore/issues/12293

同样,看起来像我在代码中所做的那样修改参数是一种非常糟糕的做法,但同样,为什么?有没有理由我必须以不那么简单和直接的方式来做,或者有更简单和直接的方式来做到这一点?

blazor

13
推荐指数
1
解决办法
1728
查看次数

C#10 可空模式:如何告诉编译器我在构造函数中间接设置了不可空属性?

考虑一个例子:

class Test {

    string S { get; set; }

    public Test() {
        Init();
    }

    private void Init() {
        S = "hello";
    }
 
}
Run Code Online (Sandbox Code Playgroud)

使用可空 C# 项目功能,此示例将触发编译器警告:

警告 CS8618 退出构造函数时,不可为 null 的属性“S”必须包含非 null 值。考虑将该属性声明为可为空。

但是,退出构造函数时,该属性确实包含非空值,只是不是直接在构造函数中设置,而是在从构造函数无条件调用的方法中间接设置。

这个例子清楚地表明该属性不可能为S空。Test创建类的实例时,Init()将无条件调用该方法,因此该S属性始终设置为“hello”。

当然,这个警告可以在代码中被抑制,但这看起来很丑陋。这是告诉编译器我确实S在其他地方将该属性设置为非空值的更好方法吗?

顺便说一句,如果您真的想知道为什么要在构造函数中间接设置值,让我们考虑一下类型D的另一个派生属性Derived。要创建字符串的实例,Derived必须首先解析字符串,我们不想每次读取属性时都解析字符串D

因此,更实际的代码看起来更像是这样的:

class Test {

    public string S { 
        get => _S;
        set => D = new Derived(_S = value);
    }

    public Derived D { …
Run Code Online (Sandbox Code Playgroud)

c# nullable c#-10.0

11
推荐指数
1
解决办法
3447
查看次数

当 ASPNETCORE_ENVIRONMENT 更改为除“开发”之外的任何内容时 - Blazor 应用程序在 VS 中调试时看不到来自 razor 类库的资源

也许只是尝试一下这个例子:

https://github.com/HTD/BlazorProfiles

这是一个演示 Blazor 应用程序(默认)。我创建了 2 个自定义应用程序配置文件:开发和生产。只需在 Visual Studio 中按 F5 键即可调试两者。

然后我创建了一个虚拟 Razor 组件库并将其命名为 RCL。我将其作为主项目的依赖项。在我的虚拟 RCL 中,wwwroot我在目录中添加了extra.css文件。该文件的作用是将背景颜色更改为浅绿色。如果发生这种情况 - 则意味着文件已被加载。如果背景保持灰色/白色,则不会加载。

这是_Host.cshtml加载 CSS 的片段:

<link href="_content/RCL/extra.css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)

尝试运行它。有用。但是,有一个条件: ASPNETCORE_ENVIRONMENT环境变量必须设置为“Development”。

如果您测试Production配置文件(或将环境变量更改为“Production”),然后运行应用程序 - 该extra.css文件将不会被加载。

在此输入图像描述

背景没有变成绿色,所以有问题。为什么会发生这种情况?这是 Visual Studio 中的错误吗?

如果您想知道为什么我需要设置此环境变量:它允许加载额外的

appsettings.[ASPNETCORE_ENVIRONMENT].json

文件。所以我可以为我的应用程序设置不同的配置。我需要使用不同的配置测试我的应用程序。现在我只能在 Visual Studio 中使用“开发”配置来调试它。当我将配置更改为其他任何内容时,我无法运行我的应用程序,因为它无法从库中加载组件所需的必要 JavaScript 文件。

因此,预期的行为:无论我在“ASPNETCORE_ENVIRONMENT”中放入什么 - 来自 RCL 的文件应该始终加载。为什么他们不应该呢?

实际行为:使用不同的配置(配置文件)会中断 Razor 组件库加载。

blazor blazor-server-side

9
推荐指数
2
解决办法
1938
查看次数

在哪里可以找到所有jQuery事件的列表?

我确实尝试了谷歌和jQuery文档,我放弃了.

我需要事件名称.不 - 我不需要用代码加载它们,我需要它们作为HTML页面,你知道,阅读并检查我刚刚忘记的这个事件的确切名称.我敢肯定网上有隐藏的som笑我:)

对我(或任何人)来说,在这里问一下是没有意义的,"嘿,如何在jQuery.ajax启动时附加代码".我知道,jQuery .ajax()会触发一些全局和本地事件,我知道,如果我再浪费15分钟来阅读整个.ajax()文档,我会找到它,但这不是我的观点.如果您忘记了很少使用的HTML标记名称或语法,只需在Google中输入"HTML标记",然后在不到10秒的时间内找到您的标记.尝试使用jQuery事件名称:)"窗口事件"返回Microsoft的非常好的文档.

我宁愿把时间浪费在一个非常好的问题上:在哪里可以找到所有jQuery事件的列表?如果他们有某种描述会很酷,但最重要的是名字.

我不需要任何特别的一个.我需要在一个地方完成所有这些.

当涉及到"类方法和属性"时,它的脑力很容易.我知道代码可以定义任意数量的自定义事件,但首先:DOMDocument定义其默认值,JavaScript窗口定义自己的,jQuery本身定义自己的.有清单吗?

jquery

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

如何让TextBox失去焦点?

TextBox当用户触摸Enter虚拟键时,如何使其失去焦点并隐藏屏幕键盘?

    private void TheName_KeyDown(object sender, KeyRoutedEventArgs e) {
        var tb = sender as TextBox;
        if (e.Key == Windows.System.VirtualKey.Enter) {
            // ... tb.LooseTheFocus_PLEASE(); !???
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# windows-phone-8

7
推荐指数
2
解决办法
2万
查看次数

如何使用 p/invoke 在没有 Mono.Posix 的情况下在 .NET 5 / .NET 6 中获取 Linux 文件权限?

我最近发现,我可以相对容易地从 .NET 进行 Linux 系统调用。

例如,要查看我是否需要,sudo我只需签名如下:

internal class Syscall {

[DllImport("libc", SetLastError = true)]
internal static extern uint geteuid();

// ...
}
Run Code Online (Sandbox Code Playgroud)
public static bool IsRoot => Syscall.geteuid() == 0;
Run Code Online (Sandbox Code Playgroud)

整洁的。比其他一切都更容易和更快,对吗?这是最简单的系统调用,其他使用字符串和结构。

经过一番深入研究文档并自行测试后,我发现默认编组器libc可以将字符串 from 直接映射到stringfrom char*,大多数其他内容只需要使用一些手动映射IntPtr到结构的乐趣。

所以以类似的方式我快速绘制chmodchown,,,,,,,, 。所有这些都在我的 Ubuntu VM 上进行了测试,有效。lchowngetgrnamgetpwnamgetuidsymlink

我什至制作了自己的超简洁Chmod实现,其工作方式与chmod接受相对权限(如u+wX. 并遍历文件系统。

这就是我失去一个晚上的地方。我需要原始权限,我读到可以通过调用获得它们stat。可能会出现什么问题?

首先,我使用手动文档 制作了Stat结构: https://man7.org/linux/man-pages/man2/stat.2.htmlLinux

然后我做了相应的extern

第一个惊喜:找不到入口点。

我挖啊挖啊,又挖了一些。直到我打开 …

.net c# linux pinvoke libc

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

如何从 Blazor C# 代码调用静态 JavaScript 方法

首先,我的JS:

class MyClass {
    static myMethod() {
        alert("TEST");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 JS 运行时注入如下:

[Inject] protected IJSRuntime Js { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想调用这样的静态方法:

Js.InvokeVoidAsync("MyClass.myMethod");
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

Microsoft.JSInterop.JSException:在“窗口”中找不到“MyClass”。

是否有一个理智、合理的方法来解决这个问题,或者仅通过将 window.MyClass = MyClass 添加到我的 JS 中?

javascript c# interop blazor

6
推荐指数
1
解决办法
3095
查看次数

Blazor:验证复杂类型

我在现实世界的应用程序中有一个非常复杂的表单。事实上 - 许多复杂的形式使用复杂的数据。在多个地方使用不同的部分,这些部分具有我的表单所需的属性。所以它看起来像这样:

class FormData {

    [ValidateComplexType]
    public PropertyClass Feature { get; } = new PropertyClass();

    [Required]
    public string DirectProperty { get; set; }

}

class PropertyClass {

    [Required]
    public string NestedProperty { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

然后我有一个如下所示的表单片段:

<TextInput @bind-Value="Input.DirectProperty" />
<TextInput @bind-Value="Input.Feature.NestedProperty />
Run Code Online (Sandbox Code Playgroud)

我想查看来自直接属性和嵌套属性的验证消息。它不适用于DataAnnotationsValidator.

我从直接属性中看到验证问题,但从嵌套属性中没有看到验证问题。但真正邪恶的是——有时我会从嵌套的消息中收到验证消息。只是有时,而不是在尝试使用提交按钮实际提交表单时。好的,它是可重现的:我输入一个有效值并按 Enter,我输入一个无效值并按 Enter 或 Tab。然后我会看到该消息,直到单击“提交”按钮。这种行为是疯狂的、出乎意料的和随机的。

所以微软的解决方案来了,来看看一个奇怪而特殊的包:

<PackageReference Include="Microsoft.AspNetCore.Blazor.DataAnnotations.Validation" Version="3.1.0-preview4.19579.2" />
Run Code Online (Sandbox Code Playgroud)

您不会在 Visual Studio 的 NuGet 面板中搜索它。它可能未被微软列出。

但是,有一个(当前?)文档指向它: https://learn.microsoft.com/en-us/aspnet/core/blazor/forms-validation ?view=aspnetcore-3.1

搜索文本“ValidateComplexType”或“ObjectGraphDataAnnotationsValidator”。

是的,他们承认它是实验性的,但首先 - 没有更新的版本,然后再说一次,它未列出。AFAIK 这是一个原因。

原因是它没有按预期工作,特别是在升级其他软件包之后。

首先,它似乎有效。我的嵌套属性已得到验证,那么问题出在哪里呢?单击几次后,我发现相同的随机行为,但这一次 - 我收到重复的验证消息。因此,第一种方法的意外随机行为会在另一个验证器中显现出来。

为了消除随机性并恢复理智的验证行为,我必须展平输入模型的层次结构。然后——就不会发生任何随机的事情。验证就可以了。问题是 - 我的应用程序有许多非常大且复杂的表单。我将不得不重写其中的很大一部分,以使随机行为消失。

ObjectGraphAnnotationValidator因此,这是一个严重的大问题: …

blazor blazor-server-side

6
推荐指数
0
解决办法
4413
查看次数

Blazor:包含主页脚本和样式的最佳方式是什么?

在默认的 Blazor 项目中,我们获取Pages/_Host.cshtml包含应用程序 HTML 模板之类内容的文件。

最近,我创建了我的第一个 Razor 组件库 (RCL),并且它可以工作。这是它的脚本部分:

<script src="_content/Woof.Blazor/js/woof.js"></script>
<script src="_content/Woof.Blazor/js/modal.js"></script>
<script src="_content/Woof.Blazor/js/input.js"></script>
<script src="_content/Woof.Blazor/js/datatable.js"></script>
<script src="_content/Woof.Blazor/js/autocomplete.js"></script>
Run Code Online (Sandbox Code Playgroud)

这些脚本手动包含在我的应用程序中。图书馆有没有办法自动将这些文件添加到应用程序模板中?顺便说一句,如果样式表也可以自动添加,那就太好了。

编辑:我只是尝试创建一个_Scripts.cshtml文件,但没有成功。Visual Studio 显示了很多奇怪的错误,可能是由于缺少包引起的,但我不知道。使脚本部分成为局部视图?它实际上并不是 MVC 的一部分。所以可能我错了。

我想要实现的是将上面的整个脚本部分替换为一行,包括我的库中的所有预定义和预配置的脚本。

blazor blazor-server-side asp.net-blazor

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