我对任何自动更新解决方案都不感兴趣,例如ClickOnce或MS Updater Block.对于任何想要问为什么不这样做的人:我已经在使用这些并且它们没有任何问题,我只想了解任何有效的替代方案.
我想发布补丁 =小差异,这些差异将修改具有最小可能增量的部署的现有文件.不仅需要修补代码,还需要修补资源文件.修补正在运行的代码可以通过维护部署的两个单独的同步副本来实现(不需要动态更改正在运行的可执行文件).
应用程序本身可以部署xcopy(以避免MSI自动更正已修改的文件或破坏ClickOnce签名).
我想学习如何处理不同版本的补丁(如存在发布了一个补丁,修复一个错误,后来另外一个补丁,修复另一个错误(在同一个文件) - 用户可能有它们的任意组合,并有来自第三补丁 - 在文本文件中,这可能很容易实现,但可执行文件怎么样?(本机Win32代码与.NET,有什么不同?)
如果第一个问题是太难以解决或无法解决的可执行文件,我想至少学习是否有实现与串行版本简单的打补丁的解决方案 - 为了安装第5版,用户必须安装,以确保所有以前的版本部署的有效性.
这些补丁可以作为网站上的可下载文件发布 - 无需直接从正在运行的应用程序进行自动补丁功能.
有没有现成的解决方案来实现这一目标?
注意:关于SO的一些问题可能看起来像重复,但没有一个有很好的答案.
这个问题是关于Windows平台,最好是.NET.
到目前为止,wyUpdate似乎最适合这个问题.仍然对替代品感兴趣.
string.Format返回的字符串似乎使用了一些奇怪的编码.与源代码中声明的字符串中包含的空格相比,格式字符串中包含的空格使用不同的字节值表示.
以下测试用例演示了该问题:
[Test]
public void FormatSize_Regression()
{
string size1023 = FileHelper.FormatSize(1023);
Assert.AreEqual("1 023 Bytes", size1023);
}
Run Code Online (Sandbox Code Playgroud)
失败:
String lengths are both 11. Strings differ at index 1.
Expected: "1 023 Bytes"
But was: "1 023 Bytes"
------------^
FormatSize方法:
public static string FormatSize(long size)
{
if (size < 1024)
return string.Format("{0:N0} Bytes", size);
else if (size < 1024 * 1024)
return string.Format("{0:N2} KB", (double)((double)size / 1024));
else
return string.Format("{0:N2} MB", (double)((double)size / (1024 * 1024)));
}
Run Code Online (Sandbox Code Playgroud)
在Assert行上设置断点时从VS立即窗口:
size1023
"1 023 Bytes" …Run Code Online (Sandbox Code Playgroud) 我在MongoDB中有一个文档集合,其结构如下(有多个容器文档,每个包含Sessions,每个会话包含1个Order,每个Order包含多个Items):
{
"Sessions" : [{
"ID" : "1882a092-d395-45d1-b36b-e2fa3df81b95",
"Order" : {
"Items" : [{
"_id" : "a9c94a5e-10ef-433d-9c63-f4555eb7c2a7",
"Title" : "UPDATE THIS",
}]
}
}],
"_id" : "1b640bc4-fdb4-49b1-9c60-e4c6f1bd0405"
}
Run Code Online (Sandbox Code Playgroud)
我想在知道项目的时候更新会话Title中的给定内容(如果有帮助,我也知道会话的ID):Item_id
我尝试过以下方法:
col.Update(Query.EQ("Sessions.ID", sessionID),
Update.Set("Sessions.$.Order.Items.Title", newTitle));
col.Update(Query.EQ("Sessions.Order.Items._id", id),
Update.Set("Sessions.Order.Items.$.Title", newTitle));
Run Code Online (Sandbox Code Playgroud)
两者都抛出异常WriteConcern detected an error 'cannot use the part (Sessions of Sessions.Order.Items.0.Status) to traverse the element ....我也尝试过使用组合查询的不同组合,这些组合Query.And可能没什么意义,因为它们不值得在这里发布.
如何使用C#驱动程序更新文档数组中包含的子文档中的字段?
我意识到单独使用位置运算符不能做到这一点(并且位置运算符不会神奇地匹配内部数组).
我正在寻找开箱即用的解决方案如何在不更改架构的情况下完成此类更新.
据我所知,ASP.NET MVC 中的 AntiForgeryToken 功能确实可以防止跨站点攻击。
但是,它是否会阻止在 POST 之前更改表单值?
例如,恶意攻击者可能会发现评级页面始终包含包含评级实体 ID 的隐藏字段,并创建 POST 请求来人为地对自己的所有实体进行高评级。
确保 GET 和 POST 之间的表单值不被更改的首选方法是什么?
我在这里和超级用户之间发帖.如果您觉得这不属于此,请原谅.
我正在观察此处描述的行为- Googlebot正在我的网站上请求随机网址,例如aecgeqfx.html或sutwjemebk.html.我确信我没有从我网站上的任何地方链接这些网址.
我怀疑这可能是谷歌探讨我们如何处理不存在的内容 - 引用链接问题的答案:
[google is requesting random urls to] see if your site correctly
handles non-existent files (by returning a 404 response header)
Run Code Online (Sandbox Code Playgroud)
我们有一个针对不存在的内容的自定义页面 - 一个风格的页面,上面写着"内容未找到,如果您认为自己错误,请与我们联系",并提供一些内部链接,自然地提供了一个200 OK.URL直接提供(不重定向到单个URL).
我担心这可能会歧视谷歌的网站 - 他们可能不会将用户友好页面解释为,404 - not found并且可能认为我们正试图伪造某些内容并提供重复内容.
我应该如何确保谷歌不会认为该网站是虚假的,同时向用户提供用户友好的消息,以防他们偶然点击死链接?
这个问题可能看起来有点像stackoverflow实现,但我在其他网站上看到了类似的模式,它们也使用REST友好的URL重写.
例如,指向特定问题的链接如下所示: ASP.NET MVC - 将冗余参数传递给操作
1388703显然是某种独特的ID,其余的是问题的标题.
ID本身应该足够了,所以放置问题标题可能有什么好处(在这种特殊情况下,可以看到stackoverflow几乎在所有地方使用它,例如徽章,用户配置文件等)作为第二个参数?
删除URL的最后一部分时,将显示相同的页面,这是预期的.但是当您将最后一部分更改为任何其他字符串时,仍会显示相同的结果.
这只是一个美容问题,允许更容易管理链接(例如,当存储书签?)或它有任何其他优势?
asp.net-mvc ×2
c# ×2
.net ×1
architecture ×1
asp.net ×1
deployment ×1
diff ×1
googlebot ×1
mongodb ×1
patch ×1
security ×1
seo ×1
string ×1
webserver ×1
windows ×1