小编Bou*_*uke的帖子

参考所有Swift协议?

Swift有一个类接口的概念,叫做Protocols.但是我似乎无法找到Swift API中所有可用协议的完整参考.我在哪里可以找到所有协议的列表?

swift ios8 swift-protocols

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

错误 CS0104:“Guid”是“System.Guid”和“System.Guid”之间的不明确引用

在我的一个项目中,我启用了 ImplicitUsings (C# 10) 功能。该项目是一个多目标 .NET 4.8 Framework 和 .NET 6 的 Sdk 项目。截至昨天,我的构建在 Azure DevOps 上开始失败,并出现以下错误:

错误 CS0104:“Guid”是“System.Guid”和“System.Guid”之间的不明确引用

即使是先前已知良好的提交(前天)的构建现在也失败了。管道没有改变。检查代理的图像会产生相同的版本 (20220207.1)。该问题不会在最新的 Visual Studio 2022 (17.1) 上本地重现。

该问题出现在包含 的文件中using System,例如 EF Core 迁移文件。我可能可以通过删除这些“未使用的”使用来解决问题,但是每当创建新的迁移时,问题就会再次出现。生成的 usings( obj\Debug\net48\Project.GlobalUsings.g.cs) 声明以下 using global using global::System;。在其他文件中使用Guid不会产生此错误。

更新。传奇还在继续。现在,我在引用其他 .NET Standard 2 项目的 .NET 6 项目上也遇到构建失败问题。该错误存在于生成的源文件(DragonFruit)中,其中包含行using System.Threading.Tasks. 在本地构建良好,但在 Azure DevOps 上失败并出现以下错误:

D:\ a \ 1 \ s \ XXX \ obj \ Debug \ net6.0 \ XXX.g.cs(8,31):错误CS0104:“任务<>”是“System.Threading.Tasks”之间的不明确引用。任务”和“System.Threading.Tasks.Task”[D:\a\1\s\Source\XXX.csproj]

是什么可以改变这些使用现在导致构建失败的情况?如何在不手动更新迁移的情况下解决此警告?

c# azure-devops azure-pipelines-build-task azure-pipelines

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

MongoDB 序列化 Dictionary&lt;MyEnum,object&gt;

我有一些模型Dictionary<MyEnum, object>。当我尝试使用 C# 驱动程序插入 mongoDB 时,出现以下消息的异常:

使用 DictionaryRepresentation.Document 时,键值必须序列化为字符串。

当然,我可以添加属性[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)]并且它可以工作,但我希望能够将枚举作为字符串持久化。

public MyEnum {
  A,
  B
}

[BsonDictionaryOptions(DictionaryRepresentation.Document)]
public Dictionary<MyEnum, object> MyData { get; set; }
Run Code Online (Sandbox Code Playgroud)

由于不同的原因,我想在 mongo 中拥有类似的东西。

{
   "MyData": {
      "B": "xxxx",
      "A": "xxxx"
   }
}
Run Code Online (Sandbox Code Playgroud)

对于单个枚举,我只能使用该[BsonRepresentation(BsonType.String)]属性,但是如何告诉驱动程序以获取字典将枚举键序列化为字符串?

c# serialization dictionary mongodb

7
推荐指数
3
解决办法
4443
查看次数

如何限制Google联合登录特定的Apps域?

我想在客户的应用程序中实现单点登录.客户通过Google Apps托管了电子邮件.Google提供OpenID,这可能相对容易实现.但是,用户可能无法登录到正确的Google帐户(甚至是多个帐户).

因此,在使用Google OpenID端点时https://www.google.com/accounts/o8/id,系统会向用户显示他/她想要登录的Google帐户.由于该应用程序只允许从Google Apps域登录,因此可以跳过此步骤,并应提高用户体验.但是,我无法找到办法做到这一点.在SO上有这个问题,但链接都已死或参考过时的规格.此外,我在Google帐户用户联合登​​录规范中找不到提示.

有些地方说应该使用https://www.google.com/a/[domain]/o8/ud?be=o8,但这似乎不起作用(不再):

$ wget --header='Accept: application/xrds+xml' https://www.google.com/a/[domain]/o8/ud?be=o8
2012-01-24 09:29:53 ERROR 400: Bad Request.
Run Code Online (Sandbox Code Playgroud)

openid google-apps

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

在django-crispy-forms中创建控件行

使用django-crispy-forms我想在一行上组合两个(或更多)小部件.另请参见附带的示例.我认为应该可以使用该库,尽管文档中包含有关此问题的示例,但源代码也没有帮助.那么有没有人设法使用django-crispy-forms获得类似的结果?

示例控件 - 行

这种表单所需的HTML如下所示:

<div class="control-group">
    <label for="desc" class="control-label">
        Description
    </label>
    <div class="controls controls-row">
        <input class="span2" maxlength="255" type="text" id="desc">
        <input class="span3" maxlength="255" type="text">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

django django-forms django-crispy-forms

6
推荐指数
2
解决办法
4001
查看次数

macOS Safari 缓存响应,而标头指定不缓存

服务器对 GET 请求的响应具有以下标头:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Pragma: no-cache
Date: Thu, 08 Feb 2018 19:16:26 GMT
Cache-Control: no-cache, no-store, must-revalidate
Server: Microsoft-IIS/10.0
Content-Length: 801
Expires: -1
Content-Encoding: deflate
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 5.2
Run Code Online (Sandbox Code Playgroud)

现在 4 秒后,浏览器 (macOS Safari 11.0.3) 发出相同的请求。开发者控制台显示响应来自缓存。我不明白为什么 Safari 甚至缓存响应:

  • Expires 是无效值,不应缓存响应
  • Cache-Control: no-cache,不应缓存响应
  • Cache-Control: no-store,不应缓存响应
  • Cache-Control: must-revalidate,至少应该验证响应,服务器日志中没有这样的请求
  • Pragma: no-cache,不应缓存响应

因此,尽管所有标头都明确说明是否应缓存响应,但 Safari 选择缓存响应。为什么?

为了完整起见,请求如下所示:

GET (...) HTTP/1.1
Host: (...)
Referer: (...)
Accept: application/json, text/javascript, */*; q=0.01
Connection: keep-alive
Accept-Encoding: br, gzip, …
Run Code Online (Sandbox Code Playgroud)

safari caching

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

Swift 中的线程间通信?

我的目标是使用 Swift 解析大型 XML 文件 (20 GB)。NSXMLParser 和与 Swift 对象的桥接存在一些性能问题,因此我正在考虑多线程。具体有以下划分:

  1. 主线程-解析数据
  2. 工作线程 - 将 ObjC 类型转换为 Swift 类型并发送到 1。将 ObjC NSDictionary 转换为 [String: String] 是最大的瓶颈。这也是分离到多线程的主要原因。
  3. 工作线程 - 将 XML 解析为 ObjC 类型 - 并发送到 2. NSXMLParser 是一个推送解析器,一旦开始解析,就无法暂停它。

应按顺序解析数据,因此应保持输入顺序。我的想法是在 1 和 2 上运行 NSRunLoop,允许并行处理而不会阻塞。根据Apple的文档,线程之间的通信可以通过调用来实现performSelector:onThread:withObject:waitUntilDone:。然而这个符号在 Swift 中不可用。

我认为 GCD 不适合作为解决方案。两个工作线程都应该是长时间运行的进程,新工作以随机间隔进入。

如何使用 Swift 实现上述目标(例如,多线程上的 NSRunLoops)?

multithreading nsrunloop swift

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

FatalExecutionEngineError after restarting debug session

Since a few weeks (months?) I've been sometimes getting the following exception after restarting my ASP.NET application inside Visual Studio 2017 / 2019 Enterprise. It only happens when IIS Express was already running my application and I needed to start a new debug session after recompiling.

每当发生这种情况时,我都必须终止 IIS Express ( taskkill /f /im iisexpress.exe) 并在 VS 中启动新的调试会话。我无法弄清楚是什么触发了这个问题。有一天,它开始在 VS 2017 Enterprise 上发生。也许是因为我收到了一些 Win10 更新?升级到 VS 2019 Enterprise 并没有解决问题。

托管调试助手“FatalExecutionEngineError”
消息=托管调试助手“FatalExecutionEngineError”:“运行时遇到致命错误。错误的地址位于线程 0x16b8 上的 0x45b30496。错误代码为0xc0000005。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户编组错误,这可能会损坏堆栈。

报告了一些类似的问题,但要么不能解决我的问题,要么不适用: …

c# visual-studio visual-studio-debugging iis-express

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

为什么我的CSS掩码无法在Firefox中运行?

我想在图像上制作一个面具.

它在Chrome中运行良好,所以我必须做正确的事情.

这是代码:

<style type="text/css">
  .element {
    width: 250px;
    height: 250px;
    overflow: hidden;
    color: #fff;
    background: url(images/film.png);
    mask:url(images/cat.svg);
    -webkit-mask-image: url(images/cat.svg);
  }
</style>
</head>

<body>
  <div class="element">
  </div><img src="images/cat.svg" width="250" height="250" />
</body>
Run Code Online (Sandbox Code Playgroud)

可在此查看:kindervakantiepas.nl/mask/mask.html

为什么它不适用于Firefox?

css firefox mask

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

Swift命令行工具中的多个工作人员

在Swift中编写命令行工具(CLT)时,我想处理大量数据.我已经确定我的代码是CPU限制的,性能可以从使用多个内核中受益.因此,我想并行化部分代码.说我想实现以下伪代码:

Fetch items from database
Divide items in X chunks
Process chunks in parallel
Wait for chunks to finish
Do some other processing (single-thread)
Run Code Online (Sandbox Code Playgroud)

现在我一直在使用GCD,一个天真的方法看起来像这样:

let group = dispatch_group_create()
let queue = dispatch_queue_create("", DISPATCH_QUEUE_CONCURRENT)
for chunk in chunks {
    dispatch_group_async(group, queue) {
        worker(chunk)
    }
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
Run Code Online (Sandbox Code Playgroud)

但是GCD需要一个运行循环,因此代码将在组永远不会执行时挂起.runloop可以启动dispatch_main(),但它永远不会退出.也可以运行NSRunLoop几秒钟,但这不是一个坚实的解决方案.无论GCD如何,使用Swift如何实现?

swift

4
推荐指数
3
解决办法
2814
查看次数