小编Bri*_*ell的帖子

你能通过不安全的方法改变(不可变)字符串的内容吗?

我知道字符串是不可变的,对字符串的任何更改只会在内存中创建一个新字符串(并将旧字符串标记为空闲字符串).但是,我想知道我的下面的逻辑是否合理,你实际上可以以一种循环方式修改字符串的内容.

const string baseString = "The quick brown fox jumps over the lazy dog!";

//initialize a new string
string candidateString = new string('\0', baseString.Length);

//Pin the string
GCHandle gcHandle = GCHandle.Alloc(candidateString, GCHandleType.Pinned);

//Copy the contents of the base string to the candidate string
unsafe
{
    char* cCandidateString = (char*) gcHandle.AddrOfPinnedObject();
    for (int i = 0; i < baseString.Length; i++)
    {
        cCandidateString[i] = baseString[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法确实改变了内容candidateString(没有在内存中创建新的candidateString),还是运行时通过我的技巧看待它并将其视为普通字符串?

c#

14
推荐指数
2
解决办法
1460
查看次数

是否可以使用凭据文件针对 LOCAL 驱动程序安装 CIFS 卷?

我知道docker-volume-netshare存在这样的插件,我过去使用过它们,但对于这个项目,我仅限于本地驱动程序。

我可以使用传统意义上的本地驱动程序成功创建和使用 CIFS 卷(将用户名/密码内联传递给它),但现在我想通过凭据文件传递凭据。Docker 文档说它支持与 mount 类似的命令,因此,为此,我一直在尝试传递凭据,就像我通过mount命令安装它一样。

我有一个/root/.cifs文件。

username=myusername
password=mypassword 
Run Code Online (Sandbox Code Playgroud)

然后我通过手动安装对其进行了测试

mount -t cifs \
-o credentials=/root/.cifs,vers=3.0 \
//192.168.76.20/docker_01 /mnt
Run Code Online (Sandbox Code Playgroud)

它工作成功,我可以读/写数据。所以现在我尝试使用相同的逻辑创建 docker 卷。

docker volume create \
--driver local \
--name persistent \
--opt type=cifs \
--opt device=//192.168.76.20/docker_01 \
--opt o=credentials=/root/.cifs,vers=3.0
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用CIFS VFS: No username specifiedDocker 日志文件中的卷时。

我尝试通过包含用户名 ( --opt o=credentials=/root/.cifs,username=docker01,vers=3.0)来修改音量参数,但这只会导致0xc000006d STATUS_LOGON_FAILURE

有没有办法创建 CIFS 卷而不必内联指定凭据?

docker

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

IOptions 与不匹配的属性名称绑定

是否可以将 JSON 文件 (appsettings.json) 中的属性绑定到使用不同属性名称的类?

{
    "WebTarget": {
    "WebURL": "http://www.stackoverflow.com"
  }
}
Run Code Online (Sandbox Code Playgroud)
public class MyServiceOptions
{
    public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想获取该WebURL设置并将其映射到Url选项类中的属性。我已经尝试过[DataMember][JsonProperty]但它们不起作用。

我知道这并不理想,属性名称应该与 JSON 中的内容匹配,但这是一种特殊情况。

c# asp.net-core asp.net-core-2.1

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

有没有办法刷新docker DNS缓存(内部)?

我正在使用 Docker 18.03.1-ce,如果我创建一个容器,将其删除然后重新创建它,内部 DNS 会保留旧地址(除了新地址)。

有没有办法清除或刷新旧条目?如果我删除并重新创建网络,那么它会刷新它,但我不想每次都这样做。

我创建网络:

docker network create -d overlay --attachable --subnet 10.0.0.0/24 --gateway 10.0.0.1 --scope swarm -o parent=ens224 overlay1
Run Code Online (Sandbox Code Playgroud)

然后创建一个容器(本例中为 SQL)

docker container run -d --rm --network overlay1 --name sql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Some_SA_Passw0rd' -p 1433:1433 microsoft/mssql-server-linux 
Run Code Online (Sandbox Code Playgroud)

如果我在同一个网络上创建一个 Alpine 容器,我可以nslookup sql按名称并解析为10.0.0.6. 没有问题,到目前为止一切都很好。

现在,如果我删除 SQL 容器并重新创建它,则会nslookup sql显示10.0.0.610.0.0.8. 该10.0.0.6是原来的地址,不再活着,但仍做出决议。

我的容器使用的名称服务器127.0.0.11是用户创建的网络的典型名称,但我找不到任何可以让我清除其缓存的内容。

也许我遗漏了一些东西,但我认为只要容器被移除,DNS 条目就会被拆除。

任何见解当然值得赞赏!

docker docker-networking

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

按钮内的中心路径内容

我有一个从 Inkscape 导出的非常简单的路径(只是一个 + 符号),我想将它用作按钮的内容,但是当我这样做时,路径偏离了中心。

偏心路径

<Button Height="24" Width="24">
    <Viewbox HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Fill">
        <Path Fill="#000000" Data="M 11 5 L 11 11 L 5 11 L 5 13 L 11 13 L 11 19 L 13 19 L 13 13 L 19 13 L 19 11 L 13 11 L 13 5 L 11 5 z"/>
    </Viewbox>
</Button>
Run Code Online (Sandbox Code Playgroud)

我在一个包裹它Viewbox,所以我可以扩展它,我试着播放HorizontalAlignmentVerticalAlignmentLayoutRounding,但他们似乎并没有影响定位。

我猜路径数据本身对此负责..可能从第一个 Move To (M) 开始,但我对手动编辑路径没有信心。

有什么办法可以纠正这个问题,让它在按钮内居中显示?我有更多的按钮要构建,所以我想了解发生了什么。

这是原始的SVG:

<svg xmlns="http://www.w3.org/2000/svg" version="1" viewBox="0 0 24 24" enable-background="new …
Run Code Online (Sandbox Code Playgroud)

wpf

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