小编Bob*_*Bob的帖子

高效的C++方式,为C++字符串中的特殊符号(")赋予字面意义

我想说这个:

<script src = "Script2.js" type = "text/javascript"> < / script>
Run Code Online (Sandbox Code Playgroud)

在一个std::string所以我\在每个双引号(")之前附加一个()符号,给它一个字面含义",而不是像这样的C++中的字符串分界:

std::string jsFilesImport = "<script src = \"Script2.js\" type = \"text/javascript\"> < / script>\""
Run Code Online (Sandbox Code Playgroud)

如果我有string很多("),则\每个(")的添加()变得困难.有一种简单的方法可以在C++中实现这一点吗?

c++ string std string-literals c++11

17
推荐指数
1
解决办法
1243
查看次数

Visual Studio中的SSH远程调试采用什么格式的私钥?

我有一个在 Debian 服务器上运行的 .NET 5 应用程序,我想将调试器附加到该服务器上。我尝试使用的调试器是集成到 Visual Studio 2019 中的调试器。

我满足文档中列出的所有先决条件。

建立新连接时,密码连接有效。但是,我使用私钥的尝试都没有产生可用的连接。

当通过 Visual Studio 外部的 PuTTY 和 Windows OpenSSH 二进制文件进行连接时,此私钥效果很好。因此,底层 SSH 工具似乎已正确设置。


尝试:

  • 不受保护的 OpenSSH 兼容私钥:

    结果%LocalAppData%\devenv_exe_linux_connection_error_133651_090121.log仅包含文本Bad Data.

    Passphrase invalid空密码框上也有说明

  • 受密码保护的 OpenSSH 兼容私钥:

    与不受保护的密钥完全相同的结果。Bad Data.Passphrase invalid

  • 不受保护的 PuTTY 兼容私钥:

    主机/端口文本框报告Failed to negotiate host key algorithm. Only RSA and DSA host keys are supported.(服务器有可用的 ecdsa/ed25519/rsa 主机密钥,并且密码验证也接受了 ecdsa 主机密钥)

    私钥文件文本框报告An error occurred connecting using private …

.net-core visual-studio-2019

9
推荐指数
1
解决办法
2148
查看次数

删除单个换行符,保留"空"行

假设我有使用光标选择以下文本的文本:

This is a test. 
This 
is a test.

This is a test. 
This is a 
test.
Run Code Online (Sandbox Code Playgroud)

我想将其转换为:

This is a test. This is a test

This is a test. This is a test
Run Code Online (Sandbox Code Playgroud)

换句话说,我想用空格替换单个换行符,只留空行.

我认为以下内容可行:

RemoveSingleLineBreaks()
{
  ClipSaved := ClipboardAll
  Clipboard =
  send ^c
  Clipboard := RegExReplace(Clipboard, "([^(\R)])(\R)([^(\R)])", "$1$3")    
  send ^v
  Clipboard := ClipSaved
  ClipSaved = 
}
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.如果我将它应用于上面的文本,它会产生:

This is a test. This is a test.
This is a test. This is a test.
Run Code Online (Sandbox Code Playgroud)

这也删除了中间的"空行".这不是我想要的.

为了澄清:空行我指的是"白"字的任何行(如制表符或空格) …

regex autohotkey

8
推荐指数
2
解决办法
2605
查看次数

如何为pinvoke调用的结构分配空值?

我想打电话给LsaOpenPolicy,它需要一个LSA_OBJECT_ATTRIBUTES结构。我正在使用来自pinvoke.net的结构定义。该结构具有领域public LSA_UNICODE_STRING ObjectName;

LSA_OBJECT_ATTRIBUTESMSDN文章说:

当您调用时LsaOpenPolicy,将此函数的成员初始化为NULL或零,因为该函数不使用该信息。

特别是:

对象名

    应该为NULL

虽然我可以将LSA_OBJECT_ATTRIBUTESstruct 的其他字段分配给IntPtr.Zero(或仅将其分配给0值类型),但看不到的方法ObjectName。特别,

无法将类型'System.IntPtr'隐式转换为'LSA_UNICODE_STRING'

在这种情况下我该怎么办?我应该初始化LSA_UNICODE_STRING长度为零(长度0,最大长度0,空/空缓冲区)的a吗?我应该更改LSA_OBJECT_ATTRIBUTES定义以便该字段为IntPtr吗?我应该使它为可空值并分配null给该字段吗?

我对内存管理的经验很少,因此对于可能导致内存泄漏的任何事情我都非常警惕。

c# pinvoke struct marshalling

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

为什么我只在开发环境中遇到范围服务解析错误?

我知道下面描述的错误的原因是我需要一个范围来实例化服务,这可以通过Services.CreateScope()匹配的.Dispose()/来完成using。问题是为什么我在开发和生产环境中得到不同的行为。


我有一个 .NET Core 3.1 控制台应用程序,它使用.NET 通用主机进行依赖项注入。在其中,我将 EF Core DbContext 定义为使用 进行数据库访问的范围服务AddDbContext,如下所示:

var host = Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        var configuration = hostContext.Configuration;

        services
            .AddDbContext<BotDbContext>(options =>
            {
                options
                    .UseLazyLoadingProxies()
                    .UseSqlite(configuration.GetConnectionString("Database"));
            });
    });
var db = host.Services.GetRequiredService<BotDbContext>();
Run Code Online (Sandbox Code Playgroud)

最初,我使用环境 ( DOTNET_ENVIRONMENT) as进行测试Production,这是默认情况。一切顺利。

我想要一个单独的Development环境,以更接近地模仿默认的 ASP.NET Core 模板。为此,我定义了一个调试时环境变量DOTNET_ENVIRONMENT=Development

当我这样做时,我收到以下异常:

System.InvalidOperationException:“无法从根提供程序解析范围服务“MyNamespace.Data.BotDbContext”。”

为什么只有环境有的时候才会出现这个异常Development,而没有呢Production

c# dependency-injection .net-core

4
推荐指数
1
解决办法
833
查看次数