小编Ric*_*gan的帖子

我什么时候需要.NET中的SecureString?

我试图了解.NET的SecureString的目的.来自MSDN:

System.String类的一个实例都是不可变的,当不再需要时,不能以编程方式安排垃圾收集; 也就是说,实例在创建后是只读的,并且无法预测实例何时从计算机内存中删除.因此,如果String对象包含敏感信息(如密码,信用卡号或个人数据),则使用该信息后可能会显示该信息,因为您的应用程序无法从计算机内存中删除该数据.

SecureString对象类似于String对象,因为它具有文本值.但是,SecureString对象的值会自动加密,可以修改,直到您的应用程序将其标记为只读,并且可以通过应用程序或.NET Framework垃圾收集器从计算机内存中删除.

初始化实例或修改值时,SecureString实例的值会自动加密.您的应用程序可以呈现实例不可变,并通过调用MakeReadOnly方法防止进一步修改.

自动加密是最大的收益吗?

为什么我不能说:

SecureString password = new SecureString("password");
Run Code Online (Sandbox Code Playgroud)

代替

SecureString pass = new SecureString();
foreach (char c in "password".ToCharArray())
    pass.AppendChar(c);
Run Code Online (Sandbox Code Playgroud)

我错过了SecureString的哪个方面?

.net security encryption

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

禁用WPF标签加速键(缺少文本下划线)

我将.ContentLabel 的值设置为包含下划线的字符串; 第一个下划线被解释为加速键.

如果没有(更换所有改变基础字符串___),是有办法禁用标签加速器?

wpf user-interface

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

在C#的应用程序加载期间,我可以捕获丢失的DLL错误吗?

无法找到引用的.dll时是否可以捕获异常?

例如,我有一个C#项目,引用了第三方dll; 如果找不到该dll,则抛出异常.例外是System.IO.FileNotFoundException,但我无法确定将其捕获的位置.以下代码似乎不起作用:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        try
        {
          // code goes here
        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.ToString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# dll

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

预构建MSBuild任务以更新AssemblyInfo与内置exe不同步

我在Visual Studio 2008中使用调用msbuild的预构建任务:

C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe $(MSBuildProjectDirectory)\version.targets /p:Configuration=$(ConfigurationName)
Run Code Online (Sandbox Code Playgroud)

在version.targets中,我正在更新AssemblyInfo.cs文件以替换版本信息:

   <FileUpdate
        Encoding="ASCII"
        Files="$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs"
        Regex="AssemblyInformationalVersion\(&quot;.*&quot;\)\]" 
        ReplacementText="AssemblyInformationalVersion(&quot;Product $(ConfigurationString) ($(buildDate))&quot;)]"
    />
Run Code Online (Sandbox Code Playgroud)

当我通过Visual Studio 2008构建项目时,它构建没有任何问题.

但是当我查看生成的exe的版本信息时,它包含上一个时间戳,即使AssemblyInfo.cs已经使用"正确"更改了.

似乎主编译任务没有看到预编译的变化,它总是落后.

我做错了什么想法?

c# msbuild prebuild visual-studio generated

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

C#如何评估悬停在中间窗口和中间窗口上的浮点数与编译后的浮点数?

我在字典中存储双打时看到了一些奇怪的东西,我对此感到困惑.

这是代码:

            Dictionary<string, double> a = new Dictionary<string, double>();
            a.Add("a", 1e-3);

            if (1.0 < a["a"] * 1e3)
                Console.WriteLine("Wrong");

            if (1.0 < 1e-3 * 1e3)
                Console.WriteLine("Wrong");
Run Code Online (Sandbox Code Playgroud)

第二个if语句按预期工作; 1.0不小于1.0.现在,第一个if语句的计算结果为true.非常奇怪的是,当我将鼠标悬停在if上时,intellisense告诉我错误,但代码很高兴地移动到Console.WriteLine.

这适用于Visual Studio 2008中的C#3.5.

这是浮点精度问题吗?那为什么第二个if语句有效呢?我觉得我在这里缺少一些非常基本的东西.

任何见解都表示赞赏.

Edit2(重新提出问题):

我可以接受数学精度问题,但我现在的问题是:为什么悬停过度评估正确?中间窗口也是如此.我将第一个if语句中的代码粘贴到中间窗口中,并评估为false.

更新

首先,非常感谢所有伟大的答案.

我也在同一台机器上的另一个项目中重新创建这个问题.看看项目设置,我看不出任何差异.看看项目之间的IL,我认为没有差异.看看反汇编,我发现没有明显的差异(除了内存地址).然而,当我调试原始项目时,我看到: 问题的截图http://i30.tinypic.com/ega874.png

即时窗口告诉我if是否为false,但代码属于条件.

无论如何,我认为最好的答案是在这些情况下为浮点运算做准备.我不能放弃这个的原因更多的是调试器的计算与运行时的不同.非常感谢Brian Gideon和stephentyrone的一些非常有见地的评论.

c# math floating-point

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

使用命令行参数启动文件而不知道exe的位置?

这是情况:我正在尝试启动一个应用程序,但我不知道.exe的位置.现在,如果文件扩展名已注册(在Windows中),我可以执行以下操作:

Process.Start("Sample.xls");
Run Code Online (Sandbox Code Playgroud)

但是,我还需要传递一些命令行参数.我无法让这个工作

   Process p = new Process();
   p.StartInfo.FileName = "Sample.xls";
   p.StartInfo.Arguments = "/r";  // open in read-only mode
   p.Start();
Run Code Online (Sandbox Code Playgroud)

关于解决这个问题的机制的任何建议?

编辑 @ aku

我的StackOverflow搜索技能很弱; 我没找到那个帖子.虽然我一般不喜欢窥探注册表,但这是一个很好的解决方案.谢谢!

.net c# vb.net

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

为什么在fopen()没有关闭后调用close()?

我在我们的一个内部dll中遇到了以下代码,我试图了解它显示的行为:

long GetFD(long* fd, const char* fileName, const char* mode)
{
    string fileMode;

    if (strlen(mode) == 0 || tolower(mode[0]) == 'w' || tolower(mode[0]) == 'o')
        fileMode = string("w");
    else if (tolower(mode[0]) == 'a')
        fileMode = string("a");
    else if (tolower(mode[0]) == 'r')
        fileMode = string("r");
    else
        return -1;

    FILE* ofp;
    ofp = fopen(fileName, fileMode.c_str());
    if (! ofp)
        return -1;

    *fd = (long)_fileno(ofp);
    if (*fd < 0)
        return -1;

    return 0;
}

long CloseFD(long fd)
{
    close((int)fd);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在使用适当的CloseFD重复调用GetFD之后,整个dll将无法再执行任何文件IO.我写了一个测试程序,发现我可以GetFD 509次,但第510次会出错. …

c c++ io file

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

如何在Bugzilla中播种Bug编号?

对于新的Bugzilla安装,我们希望将错误编号开始为1以外的其他内容.有没有办法做到这一点?

bugzilla

2
推荐指数
1
解决办法
2028
查看次数