小编med*_*onn的帖子

在Git中管理并行版本的最佳方法是什么?

我有一个完善的软件工具包,但通常需要小的调整(主要是为了应对来自第三方产品的兼容性问题).我现在希望生成一个"新"版本(改进的API),它将基于原始版本 - 随着时间的推移,它将与现有分支不同,但是几年后,我将需要保持原来的"实时"需要兼容性的现有客户.当然,我需要确保"调整"也适用于"新"版本,因为这些问题(在大多数情况下!)也适用于"新"版本.

所以 - 我的理想(简单)工作流程将是:

  1. 处理"新"版本时 - 更改仅适用于该版本.
  2. 在处理"旧"版本时,一旦我对它们满意(当我提交,提交或其他任何内容)时,所有得到的更改将(尽可能自动!)应用于两个版本.

我意识到需要偶尔的人工干预,合并是相互矛盾的,但根据过去手动更改的经验,我希望这种情况很少见.

目前,我正在寻求放弃VSS(是的 - 继续嘲笑我保持这么长时间!),我希望Git会让这很容易,但到目前为止,似乎没有任何"简单" "解决方案,我看到的所有建议都是围绕"rebase"构建的,这对我来说似乎是"错误的",因为rebase似乎做了许多其他的事情,比如重写历史,当我需要的只是一个简单,真实的时候" "根据其他分支的变化"前进.

  • 我在这里错过了什么吗?
  • 有没有更简单,更正确的方法来做到这一点?
  • 使用不同的源代码控制系统而不是Git,我会更好吗?

所有的想法非常感谢!

git git-branch

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

如何根据数据中的属性值选择要使用Json.Net反序列化的对象类型

我需要像这样反序列化json(它是在DICOM中定义的 - 一个国际标准,所以我不能改变格式!)

{
....
"00080060": {
  "Value": [
    "US"
  ],
  "vr": "CS"
},
"00080070": {
  "Value": [
    "ACME Products"
  ],
  "vr": "LO"
},
"00080090": {
  "Value": [
    {
      "AlphabeticName": "Better^Make^U.^MD"
    }
  ],
  "vr": "PN"
},
"00081110": {
  "Value": [
    {
      "00080008": {
        "Value": [
          "XX_0",
          "OIU",
          null,
          "PPP"
        ],
        "vr": "CS"
      }
    },
    {},
    {
      "00080008": {
        "Value": [
          "XX_2",
          "OIU",
          null,
          "PPP"
        ],
        "vr": "CS"
      }
    }
  ],
  "vr": "SQ"
},
Run Code Online (Sandbox Code Playgroud)

每个属性(在长列表中!)都有一个名称(上例中为0008XXXX),并具有子属性"vr"和Value.在大多数情况下,Value只是一个对象数组(字符串或数字),这很好,但对于2个特殊情况(如上所述的PN和SQ),它需要特殊处理,而在SQ的情况下,它实际上是一个数组顶级对象再次(可以无限递归地嵌套...)

所以 - 我需要的是一个简单的方法,在反序列化期间检查"vr"值并为json.net提供它应该用于相关"值"的类型 - 是否有一种简单的方法可以做到这一点?当然,vr可以在Value之前或之后(取决于远程实现)可能会使事情进一步复杂化......

我查看了json.net的ContractResolver和JsonConverter机制,但是ContractResolver似乎没有让我访问正在读取的数据以便允许做出选择,而JsonConverter派生类似乎让我不得不重新实现大多数什么json.net是东(否则很好!)对我来说已经:-( …

c# recursion serialization json.net json-deserialization

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

`Parallel.ForEach` 带有按定义顺序的最后一步

我正在寻找一种“整洁”且有效的方法来实现长步骤 1(可以并行化)和步骤 2 的组合,步骤 2 需要按原始顺序(如果可能的话,尽量减少来自第一步保存在 RAM 中)同时允许第二步在第一个对象的步骤 1 中的数据可用时立即开始,并与步骤 2 一起提供更多数据。

为了更详细地说明这一点,我需要压缩大量图像(慢速 - 第 1 步),然后通过网络连接按顺序发送每个图像(第 2 步)。在任何阶段限制 RAM 中准备好的压缩数据块的数量也很重要,例如,如果发送 1000 张图像,我想将“已完成”但未发送的图像数量限制为(例如)线程数/使用的处理器。

我已经完成了这个的“手写”版本,使用了一组 Task 对象,但它看起来很混乱,而且我相信其他人一定有类似的需求,所以有没有更“标准”的方法来做到这一点? 理想情况下,我希望有 2 个代表的 Parallel.ForEach 变体 - 一个用于第 1 步,一个用于第 2 步,我希望标准覆盖之一(例如包含“localFinal”参数的覆盖)可能有所帮助,但在原来这些最后阶段是“每个线程”,而不是“每个委托”。

任何人都可以指出我现有的巧妙方法来实现这一目标吗?

c# parallel-processing parallel.foreach

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

如何在Web API MultiPartContent消息上设置"type"参数?

我需要能够将多部分响应的Content-Type值设置为:

Content-Type: multipart/related; type=application/dicom; boundary={MessageBoundary}
Run Code Online (Sandbox Code Playgroud)

这是在国际标准中定义的,所以我别无选择,我看到使用"type = xxx/yyy"是在MultiPart消息中定义"主要"内容类型的标准用法.

但是......我还没有找到一种方法来使用Web API中优秀的MultipartContent类来生成这个字符串.我试过了:

1)什么都不做 - 希望它从内容中的第一个项目中获取 - 它没有

2)设置为子类型的一部分 - 例如:

MultipartContent mpc = new MultipartContent("related; type=application/dicom+xml");
Run Code Online (Sandbox Code Playgroud)

这失败,错误"值的格式'multipart/related; type = application/dicom + xml'无效."

3)明确设置为MediaTypeHeadervalue上的另一个参数:

var mthv = new MediaTypeHeaderValue("multipart/related");
mthv.Parameters.Add(new NameValueHeaderValue("type", "application/dicom+xml"));
Run Code Online (Sandbox Code Playgroud)

这给出了同样的错误:-(

我在这里遗漏了一些明显的东西,还是真的没有办法表明相关的类型?

更新:

经过一些研究,并反编译NameValueHeaderValue类,似乎问题是类型值中的/和+字符 - 因为NameValueHeaderValue的构造函数检查名称和令牌,以查看它们的本机和"仅令牌字符"版本具有相同的长度 - 即它们是否包含任何非令牌字符 - 如果是这种情况则拒绝它们.鉴于类型值的标准值是MIME类型,根据定义,它包含/字符,这似乎是一个过度且不恰当的严格约束.

c# content-type multipart asp.net-web-api

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