小编ang*_*son的帖子

在类库中使用Visual Studio 2010 Professional中的代码契约(即无静态检查)有多好?

我创建了类库,其中一些是世界各地的其他人使用的,现在我开始使用Visual Studio 2010,我想知道切换到使用代码契约是多么好的想法,而不是常规的旧代码 - 风格if语句.

即.而不是这个:

if (fileName == null)
    throw new ArgumentNullException("fileName");
Run Code Online (Sandbox Code Playgroud)

用这个:

Contract.Requires(fileName != null);
Run Code Online (Sandbox Code Playgroud)

我问的原因是我知道静态检查器不可用,所以我对我做的一些假设有点紧张,编译器无法验证.当有静态检查程序时,这可能导致类库无法为下载它的人编译.这个,再加上我甚至无法重现这个问题的事实,会让它很难解决,而且我会认为它不会说我的类库的质量如果它看起来甚至没有编译出来的框.

所以我有几个问题:

  • 如果您有权访问静态检查器,则默认情况下是否打开?或者我需要在类库中打开一个设置(因为我没有静态检查器,我不会)
  • 我的恐惧是否毫无根据?以上情况是否真的存在问题?

任何的建议都受欢迎.


编辑:让我澄清一下我的意思.

假设我在类中有以下方法:

public void LogToFile(string fileName, string message)
{
    Contracts.Requires(fileName != null);
    // log to the file here
}
Run Code Online (Sandbox Code Playgroud)

然后我有这个代码:

public void Log(string message)
{
    var targetProvider = IoC.Resolve<IFileLogTargetProvider>();
    var fileName = targetProvider.GetTargetFileName();
    LogToFile(fileName, message);
}
Run Code Online (Sandbox Code Playgroud)

现在,在这里,IoC启动,解决了一些"随机"类,它为我提供了一个文件名.让我们说对于这个库,没有办法可以找回一个不会给我一个非空文件名的类,但是,由于IoC调用的性质,静态分析无法验证这个,因此可能假设一个可能的值可能为null.

因此,静态分析可能会得出结论,存在LogToFile使用null参数调用方法的风险,因此无法构建.

我理解我可以在代码中添加假设,说编译器应该认为fileName我从该方法返回的那个永远不会为null,但是如果我没有静态分析器(VS2010 Professional),那么代码会为我编译,因此我可能会将此作为一个睡眠错误,让终极找到的人.换句话说,这里可能没有编译时警告可能存在问题,因此我可能会按原样释放库.

这是一个真实的场景和问题吗?

static-analysis visual-studio-2010 code-contracts c#-4.0

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

Mercurial和合并工具?

当两个合并的分支对同一个文件进行更改时,Mercurial是否始终使用外部合并工具?

或者它是否首先看到它是否可以合并文件本身,并且如果它不能,只能向外部工具发送?

我问的原因是我(再一次)重读了Joel Spolsky在Mercurial上写的教程,他说,在比较Subversion和Mercurial合并的方式时:

相比之下,当我们在Mercurial中单独工作时,Mercurial正忙着保留一系列变更集.因此,当我们想要将我们的代码合并在一起时,Mercurial实际上有更多的信息:它知道我们每个人都改变了什么并且可以重新应用这些更改,而不仅仅是查看最终产品并试图猜测如何放置它一起.

只是,我的经验告诉我,当两个分支对同一文件进行更改时,似乎涉及外部合并工具.因此,这不会导致上述论点不正确吗?

或者我应该解释如下:

  • Subversion仅合并两个分支的最终状态,并且在单个单元中有更多工作要做
  • Mercurial单独合并每个变更集,这使其可以使用较小的变更单位,并且合并成功的可能性更高

有人可以对此有所了解吗?


编辑:让我举个例子:

@echo off

setlocal

if exist repo rd /s /q repo

md repo
cd repo
hg init .

rem --- version 0 ---
echo 1 >test.txt
echo 2 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 >>test.txt
hg add test.txt
hg commit -m "v0"

rem --- version 1 ---
echo 1 >test.txt
echo 2 v1 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 …
Run Code Online (Sandbox Code Playgroud)

svn merge mercurial branch

8
推荐指数
2
解决办法
1695
查看次数

Mercurial,"用书签分支"

我阅读了本文档:Mercurial分支指南,特别是标题为使用书签分支的部分.

它说:

现在,您在当前变更集中有两个分支(基本上是标记).

要切换到其中一个分支,您可以使用hg update feature更新到该分支的tip变更集,并将自己标记为在该分支上工作.提交时,它会将书签移动到新创建的变更集.

我尝试了这个,但它最终同时移动了两个书签.

该指南是错误的,过时的,还是我做错了什么?请注意,我知道在单独的分支上设置书签只会移动与我当前正在处理的分支相关的书签,但是该指南(很多人说这是明确的指南)具体说明上述文本,表明它应该通过"告诉"Mercurial我正在研究哪个书签(分支)来工作.

但测试显示不然.

有任何想法吗?

例:

> hg init
> echo 1 >test.txt
> hg commit -m "initial" --addremove
adding test.txt

> hg bookmark main
> hg bookmark feature
> hg log
changeset:   0:c56ceb49ee20
tag:         feature
tag:         main
tag:         tip
user:        Lasse V. Karlsen <lasse@vkarlsen.no>
date:        Tue Nov 30 23:06:16 2010 +0100
summary:     initial

> hg update feature
0 files updated, 0 files merged, 0 files removed, 0 files …

mercurial branch bookmarks

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

通过OmniKey的非接触式卡,如何获得"UID"?

我正在尝试使用非接触式OmniKey 5321读卡器读取智能卡信息.

编辑:添加了赏金.

我正在.NET 3.5程序中编写C#3,所以这是一个Windows应用程序.

该卡上印有一些信息,我会假设,卡片数据中存在某些信息(下面有卡片和读卡器的照片.)

该卡上印有以下信息:

1* 00447   21091328-32

使用OmniKey读卡器附带的诊断应用程序时,我会收到以下信息:

Smart Card Name: iCLASS 16KS UID:EE 74 0E 00 FB FF 12 E0
ATR            : 3B 8F 80 01 80 4F 0C A0 00 00 03 06 0A 00 1A 00 00 00 00 78
Protocol       : ISO 15693 (Part 2)

现在,我已经考虑了一些转换:

  • 447十进制= 1BF十六进制(未找到)
  • 447八进制= 295十进制(未找到BCD类型编码)
  • 447八进制= 127十六进制(未找到)
  • 找不到447十六进制

这是我的问题:

  • "UID"号码是否是我可以依赖的唯一号码?我并不真正关心447号码,我需要知道的是,我从这张卡片中挑选的信息将在以后唯一识别它,以便我可以将其链接到卡片的所有者
  • 我如何阅读UID号码?在Windows中使用WINSCARD.DLL我可以看到每个字节都得到"ATR"数据,但UID显然不存在于该部分中.

这是照片,如果它给你任何信息.

OmniKey读卡器带卡

uniqueidentifier smartcard smartcard-reader winscard iso-15693

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

固定位置div仅垂直

我有一个当前的网页构建,右侧边栏是固定位置.我试图从右边定位,但不希望它与其他div内容重叠.

我正在寻找的是当内容超出视口窗口时,内容可以水平向右滚动.任何帮助将不胜感激.

与此类似:http://demo.rickyh.co.uk/css-position-x-and-position-y/但是我不能让这个工作.


这已通过替代方法解决.感谢那些真正考虑过帮助的人.

css jquery position css-position horizontal-scrolling

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

SignalR - 更改服务器超时响应

我已经创建了一个 SignalR 应用程序,但是当我在集线器配置中设置 KeepAliveInternal 和 ClientTimeOutInterval 一个值时,应用程序会忽略它并始终将两者都设置为“30,000ms”。这是我的代码:

 public void ConfigureServices(IServiceCollection services)
 {
     services.AddRazorPages();
     services.AddSignalR().AddHubOptions<ActivityHub>(SetConfig);

     // Local function to set hub configuration
     void SetConfig(HubOptions<ActivityHub> options)
     {
         options.ClientTimeoutInterval = TimeSpan.FromMinutes(30);
         options.KeepAliveInterval = TimeSpan.FromMinutes(15);
     }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了 SignalR Net Core 文档,这两个属性没有限制。超时总是“30,000”,即使我将它们设置为不同的值。

c# azure signalr asp.net-core

8
推荐指数
2
解决办法
3310
查看次数

如何在Win32中获取CPU周期数?

在Win32中,有没有办法获得一个独特的cpu循环计数或类似的东西,对于多个进程/语言/系统/等是统一的.

我正在创建一些日志文件,但是必须生成多个日志文件,因为我们正在托管.NET运行时,并且我想避免从一个调用到另一个来进行日志记录.因此,我认为我只生成两个文件,将它们组合在一起,然后对它们进行排序,以获得涉及跨世界调用的连贯时间线.

但是,每次通话都不会增加GetTickCount,因此不可靠.是否有更好的号码,以便在排序时以正确的顺序接听电话?


编辑:感谢@Greg把我带到QueryPerformanceCounter的轨道,这就是诀窍.

winapi timer cpu-cycles

7
推荐指数
2
解决办法
8393
查看次数

通过复制整个目录来"分支"本地mercurial存储库克隆是否安全?

如果我在当地有一个相当大的Mercurial项目,并希望进行实验,我是否可以安全地制作一份本地副本并在那里工作?

例如,假设我这样做:

  1. 将存储库从中央服务器克隆到本地目录
  2. 进行一些更改,在本地提交,不要推送
  3. 在本地制作目录的副本
  4. 在本地进行一些更改,提交,不要推送
  5. 推送原件
  6. 推送第二份副本

这样安全吗?或者在克隆时是否生成了一些唯一的ID?

一个项目相当大,服务器的连接速度相当慢,或者看起来如此,所以从中央服务器完成一个完整的克隆需要很长时间.

mercurial branch clone

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

Mercurial托管软件,替代品?

是否有任何软件包可用于在我自己的服务器上托管Mercurial存储库,除了它附带的非常基本的脚本?

我查看了Mercurial 上的PublishingRepositories维基页面,该列表中唯一可行的替代方案是hgwebdir我设置的脚本,但它相当基本.

有没有人为Mercurial托管制作更好的网站软件?

deployment hosting mercurial dvcs

7
推荐指数
2
解决办法
1670
查看次数

在.NET程序中将图像加载/创建到SharpDX中

我正在尝试使用SharpDX使用DirectX创建一个简单的迷宫式2D程序.

为此,我想创建位图,我可以在屏幕上呈现墙壁,走廊,迷宫外等.

但是,我似乎无法弄清楚如何将现有的图像文件加载到SharpDX库中的Bitmap类中,或者如何从头开始创建一个新的这样的Bitmap类.

由于所有类都被称为直接映射到DirectX类型,我想这只是意味着我需要学习更多的DirectX,但我希望有一个简单的例子可以告诉我我需要做什么.

如果我必须从头开始构建一个新的Bitmap并绘制它,我可以做到这一点,获得我需要的像素并不困难,但我似乎无法弄清楚那部分.

有没有人对SharpDX库有任何经验,可以给我一些指示?

.net directx image bitmap

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