小编ang*_*son的帖子

SQL Server 2005和2008在同一个开发人员计算机上?

有没有人尝试在已经安装了2005 Developer的机器上安装SQL Server 2008 Developer?

我不确定是否应该这样做,我需要在可预见的将来将2005年保留在这台机器上,以便轻松测试我们的应用程序.由于我有时需要获取数据库的备份文件并可供公司中的其他人使用,因此我不能仅将2008替换为2008,因为我怀疑(但不知道)数据库不是100%向后兼容的.

会出现什么样的问题?我是否需要使用实例名称安装新版本,这有用吗?我可以使用不同的端口号来区分它们吗?

我在technet上找到了这个条目:http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID = 3496209&SiteID = 17

它不仅仅是肯定你可以做到这一点,我有点怀疑这是可行的,但我需要知道在开始安装之前是否有任何我需要知道的事情.

任何人?

installation sql-server-2005 sql-server-2008

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

设置符号服务器给我的是什么?

我读完了这篇文章:设置一个符号服务器,详细介绍了如何为我的团队设置共享符号服务器.

我想知道的是将自己的符号添加到商店中.

我的问题是:我从中获得了什么?

我们假设我有以下构建过程:

  1. 我将更改提交到我的Subversion存储库
  2. TeamCity CI工具可以获取这些更改并进行构建+单元测试
  3. 二进制文件被提交到不同的Subversion存储库(用于我做的应用程序的引用)

如果我添加到上面的第三点,将构建的文件添加到符号存储区的能力,这给了我什么?

如果我创建一个程序,并引用提交到存储库的二进制文件,我同时获得.dll,.pdb和.xml(intellisense支持),所以我的堆栈跟踪似乎已经包含了我需要的所有内容.

这是分发.pdb的替代品吗?

或者仅仅是因为我需要在WINDBG中打开.DMP文件并分析其堆栈,我可能根本没有可执行文件,只有其他人提供的.DMP文件?(也就是说,exectuable可能来自旧版本,我只获得.DMP文件)

.net symbol-server

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

C#中的二进制补丁生成

有没有人知道或者知道C#中的二进制补丁生成算法实现?

基本上,比较两个文件(指定旧的新的),并生成一个补丁文件,可用于升级文件以具有与文件相同的内容.

实现必须相对较快,并使用大文件.它应该表现出O(n)或O(logn)运行时.

我自己的算法往往是糟糕的(快速但产生巨大的补丁)或缓慢(产生小补丁但具有O(n ^ 2)运行时).

任何建议或实施指针都会很好.

具体来说,该实现将用于使我们拥有一台主服务器的各种大型数据文件保持服务器同步.当主服务器数据文件发生更改时,我们还需要更新多个异地服务器.

我所做的最天真的算法,仅适用于可以保存在内存中的文件,如下所示:

  1. 文件中获取前四个字节,将其称为密钥
  2. 将这些字节添加到字典中,其中key - > position,其中position是我抓住那4个字节的位置,0开始于
  3. 跳过这四个字节中的第一个,抓取另外4个(3个重叠,1个),并以相同的方式添加到字典中
  4. 文件中的所有4字节块重复步骤1-3
  5. 从开始的新文件,抢4个字节,并尝试看看它在字典
  6. 如果找到,通过比较两个文件中的字节,找到最长匹配(如果有)
  7. 文件中编码对该位置的引用,并跳过文件中的匹配块
  8. 如果未找到,则从文件中编码1个字节,然后跳过它
  9. 文件的其余部分重复步骤5-8

这有点像压缩,没有窗口,所以它会占用大量内存.然而,它是相当快的,并且产生非常小的补丁,只要我尝试使代码输出最小.

更节省内存的算法使用窗口,但会产生更大的补丁文件.

我在本文中跳过了上述算法的细微差别,但如果有必要,我可以发布更多细节.但是,我确实觉得我需要一个不同的算法,所以改进上述算法可能不会让我足够远.


编辑#1:以下是对上述算法的更详细描述.

首先,组合这两个文件,这样你就有了一个大文件.记住两个文件之间的切点.

其次,这样做可以抓取4个字节并将其位置添加到整个文件中的所有内容的字典步骤中.

第三,从新文件开始的地方开始,尝试定位4字节的现有组合,并找到最长匹配.确保我们只考虑旧文件中的位置,或者来自新文件中较早的位置.这确保了我们可以在补丁应用期间重用旧文件和新文件中的材料.


编辑#2:上述算法的源代码

您可能会收到有关证书存在问题的警告.我不知道如何解决这个问题,因此暂时只接受证书.

源使用了我库中其余部分的许多其他类型,因此文件不是全部​​,但这就是算法实现.


@lomaxx,我试图为subversion中使用的算法找到一个很好的文档,叫做xdelta,但除非你已经知道算法是如何工作的,否则我发现的文件无法告诉我需要知道什么.

或者也许我只是密集...... :)

我快速浏览了你所提供的网站上的算法,遗憾的是它无法使用.二进制diff文件中的注释说:

找到一组最佳差异需要相对于输入大小的二次时间,因此它很快就会变得无法使用.

我的需求并不是最优的,所以我正在寻找更实用的解决方案.

谢谢你的答案,如果我需要它们,他会为他的工具添加一个书签.

编辑#1:注意,我会查看他的代码,看看我是否能找到一些想法,稍后我还会给他发一封电子邮件,但我已经阅读了他所引用的那本书,虽然解决方案适用于找到最佳解决方案,由于时间要求,它在使用中是不切实际的.

编辑#2:我肯定会追捕python …

c# patch file

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

Mercurial存储库有很多活跃的开发人员?

我正在经历Bitbucket,如果我们切换到Mercurial ,我似乎无法找到任何看起来像我怀疑我们的存储库看起来像的Mercurial存储库.

因此,我想知道,有没有我们在这里考虑的工作流程?

我正在谈论的是我做了一个小的自动化测试.我们有14个人在同一个项目上工作,分成4个scrum团队.为了模拟14个(我选择了10个,整数)人们在代码上并行工作,使用Mercurial DVCS,推送到同一个中央主存储库,我写了一个脚本.

  1. 我创建了一个新的"主"存储库,然后为10个虚拟人克隆它
  2. 然后,我运行了一个1000迭代循环,选择一个随机克隆,并执行以下操作之一:
    • 10%的时间,从主,从合并,提交合并和推送拉
    • 90%的时间,做一次本地更改并提交

请注意,我通过简单地让每个虚拟人员在他自己的文件上工作来确保永远不会发生合并冲突.

这将模拟在拉动,合并和推动之前进行1次提交的本地工作人员(避免在主回购中使用2个以上的头部).可能是这个工作流程是错误的.

这是存储库现在的样子(截图+链接到repo):

来自TortoiseHg的示例截图

可在此处找到存储库:http://hg.vkarlsen.no/hgweb.cgi/parallel_test/graph.

这看起来非常混乱,正如我所说,我似乎无法找到任何具有相似历史的存储库.通过"凌乱",我的意思是看起来项目的旧历史几乎总是有10个并行分支.接近顶部,它当然逐渐减少,但随着当前在本地存储库中工作的人推送到主服务器,它将会扩展.

所以我有两个问题:

  1. 任何人都可以向我展示具有相似历史的存储库吗?由于我似乎找不到任何东西,我开始怀疑我可以从中得出什么样的结论......
  2. 我们的工作流程是否有问题(也就是我在这里列出的工作流程)?我们应该改变/挤压/移植,将推动责任委托给一个人,其他事情,而不是在这里做的方式?

mercurial

18
推荐指数
2
解决办法
704
查看次数

如何确定TFS中的标签应用于哪个变更集?

我们正在使用Team Foundation Server,我们正在使用标签在我们的版本历史记录中创建点,其中生成了特定版本(内部或外部).

现在我们想知道特定变更集是否在特定标签之前或之后完成(因此包含在该版本中),但我们必须在错误的位置查找.这些信息通常在错误跟踪系统中提供,但这次这个字段保持打开,所以我们认为我们可以使用TFS来解决它.

文件的版本历史记录不包括应用的标签.要查找标签,我所知道的地方是使用"获取特定版本"对话框,将类型设置为标签并使用标签选择对话框查看我们制作了哪些标签,但此对话框并未告诉我变更集在应用标签之前/之后.

是唯一的方法来确定特定更改是否是该版本的一部分或不创建新工作区,将包含文件的目录映射到磁盘上的临时目录,使用"获取特定版本"对话框来提取该版本并执行此操作文件差异?

请告诉我我是多么愚蠢,并指出我正确的方向.

tfs label changeset

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

如何使用字节数组比较两个图像

我希望能够从Byte []转换为Image,反之亦然.

我从这里开始这两种方法:

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
    MemoryStream ms = new MemoryStream();
    imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
    return  ms.ToArray();
}

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}
Run Code Online (Sandbox Code Playgroud)

他们似乎工作,但如果我这样做:

byte[] pic = GetImageFromDb();
bool result = pic == imageToByteArray(byteArrayToImage(pic));
Run Code Online (Sandbox Code Playgroud)

我明白了result = false!

有没有办法纠正这种方法或一些不同的功能来实现我的目标?

谢谢!

c# image bytearray

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

检测或响应引导访问?

在我们正在创建的应用中,我们需要添加一些额外的屏幕来配置应用.

如果我们可以在应用程序的开始屏幕上添加额外的按钮,那将是很好的,只有在iPad没有被引导访问时才能看到.

是否可以通过引导访问检测设备当前是否正在运行,并对其启用或禁用做出反应?

ios6 guided-access

17
推荐指数
2
解决办法
4031
查看次数

用于缩进匿名方法的ReSharper配置?

如果我要求ReSharper重新格式化当前代码:

SomeMethodThatIsGivenAnAnonymousMethod(delegate
{
    Test();
});
Run Code Online (Sandbox Code Playgroud)

然后它重新格式化如下:

SomeMethodThatIsGivenAnAnonymousMethod(delegate
                                           {
                                               Test();
                                           });
Run Code Online (Sandbox Code Playgroud)

我最多可以哄它用delegate关键字排列大括号.有什么方法可以哄我把它缩回原来的方式吗?

c# resharper indentation

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

如何制作一个实际上是struct的对象(不是它的引用)的副本?

我有一个值(结构实例)被转换object为通用处理.我需要复制一下这个值.我不能明确地这样做,因为我只是拥有它,Type并且不知道它在编译时是什么.

默认情况下,我得到一份参考文献:var copy = objectOfMyStruct;.我想过制作一个明确的浅拷贝,MemberwiseClone()但我不能这样做,因为它是受保护的方法,我无法修改MyStruct.

Convert.ChangeType(objectOfMyStruct, typeOfMyStruct) 没有帮助,因为转换(实际上没有转换)发生在里面,它再次返回对象.

我怎么能这样做?

编辑:

我需要制作一个副本以保留原始值,并将其反序列化为传递给OnChangeHandler.简化的实施是:

var oldValue = type.GetValue(reference);
var newValue = oldValue; // something better is needed here
Deserialize(type, stream, ref newValue);
OnChange(oldValue, newValue);
type.SetValue(reference, newValue);
Run Code Online (Sandbox Code Playgroud)

复制是因为只发送了delta(更改),因此应该应用于原始值.

编辑2:

这个实现适用于原始类型,所以尽管int也是盒装的,我正在复制它而不是复制对它的引用.我只是不明白这一点.


这是一个需要的例子.

您可以在LINQPad中测试的此示例应该复制该结构而不将其转换回其未装箱的类型,这样当通过实现的接口调用它进行变异时,只会突变原始结构.因此问题是; 我该如何编写克隆方法?

void Main()
{
    object original = new Dummy { Property = 42, Field = "Meaning of life" };
    object clone = Clone(original);

    ((IDummy)original).Mutate(); // will modify the …
Run Code Online (Sandbox Code Playgroud)

c#

15
推荐指数
2
解决办法
1817
查看次数

在没有找到模块的32位机器上,.NET 4.0中的SetWindowsHookEx失败了吗?

我在这个页面上发现了类似的问题,但我似乎无法弄清楚如何解释答案或弄清楚它们是否真的重复.

以下是我发现的可能重复项,并附有评论:

Hans Passant对最后一个删除答案的评论如下:

你在使用.NET 4.0吗?它的CLR改变了程序集的加载方式,不再有LoadLibrary调用,也没有模块句柄.使用GetEntryAssembly()代替另一种修复. - 汉斯帕斯特5月5日19:43

那么,这里的字是什么?你在使用.NET 4.0吗?您是否尝试使用LoadLibrary("user32.dll")来获取可用的DLL句柄? - Hans Passant 5月6日15:43

我很确定我不需要这样做,但显然我不是百分百肯定.如果我需要更改它,我留下的问题是,为什么它适用于64位操作系统,在编译时Any CPU,但在任何配置中都不适用于32位.

如果加载.NET程序集确实发生了一些变化,那么我没有得到类库的正确句柄,我有以下问题:

  • 有没有什么方法可以欺骗我做我想要的,而不必降级到.NET 3.5或将钩子库更改为不受管理?
  • 为什么它在64位操作系统上运行时有效,而在32位运行时无效?

背景

我在.NET 4.0中构建了一个程序,它使用带有WH_KEYBOARD_LL钩子类型的SetWindowsHookEx来捕获按键.这在我的64位Windows 7上运行良好,但在32位Windows 7上安装键盘挂钩时崩溃时出现"找不到模块".

这是我尝试过的:

  • 编译为x86,在64位操作系统上运行,崩溃时出现"找不到模块"
  • 编译x86,在32位操作系统上运行,崩溃
  • 编译任何CPU,在64位操作系统上运行,运行良好
  • 编译任何CPU,在32位操作系统上运行,崩溃
  • 切换到.NET 3.5并重复上述四种情况,它们都有效

我宁愿不将我的代码切换到.NET 3.5,因为我使用了一些类库来简化工作,而最新的代码只在.NET 4.0中.

如果需要,可以下载包含Visual Studio 2010项目的.ZIP文件,也可以粘贴以下两个文件.

要重新创建是否要沿着该路线前进:

  1. 创建一个新的控制台项目.NET 4.0
  2. 添加另一个类库项目,也就是.NET 4.0
  3. 从控制台程序项目添加对类库项目的引用
  4. 将下面的Program.cs内容粘贴到控制台项目中的Program.cs文件中
  5. 将下面的Hook.cs内容粘贴到类库项目中的文件中.您可以将其粘贴到Class1.cs默认文件中,或添加另一个文件.你不能把它放到控制台项目中

然后构建并运行,测试各种配置.

Program.cs中

using System;
using HookLib;

namespace HookTest
{
    class Program
    {
        static void Main() …
Run Code Online (Sandbox Code Playgroud)

64-bit 32-bit .net-4.0 .net-3.5 setwindowshookex

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