小编The*_*kie的帖子

为了强调或不强调,这就是问题所在

如果二进制版本将被其他框架语言使用,那么在C#中不使用下划线为私有字段添加前缀是否有任何问题?例如,因为C#是区分大小写的,你可以调用字段"foo"和公共属性"Foo",它可以正常工作.

这会对像VB.NET这样的不区分大小写的语言产生什么影响,如果名称只能通过大小写来区分,那么是否会出现任何CLS兼容(或其他)问题?

c#

123
推荐指数
10
解决办法
6万
查看次数

TransactionScope和多线程

我想知道在处理多线程时如何以正确的方式使用TransactionScope类?

我们在主线程中创建了一个新的作用域,然后我们生成了几个工作线程,并且我们希望它们参与主作用域,因此,例如,如果作用域永远不会完成,则会在每个作者上调用回滚.

我在内部使用ThreadStaticAttribute阅读了有关TransactionScope的内容,这使得上述不可能/非常困难 - 有人可以验证这两种方式吗?如果我们以同步方式运行代码,那么回滚就可以工作,即内部事务能够参与主事务,但是如果我们切换到线程执行则不行.

谢谢

.net multithreading transactions

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

CNG,CryptoServiceProvider和HashAlgorithm的托管实现

所以我想知道哈希算法的各种实现之间是否存在任何重大差异,例如以SHA系列算法为例.它们每个都有3个实现,1个托管代码和2个围绕不同本机加密API的包装器,但使用它们之间有什么主要区别吗?我可以想象包装器版本可以具有更高的性能,因为它在本机代码中执行,但是他们都需要执行完全相同的计算,从而提供相同的输出,即嘿是可互换的.它是否正确?

例如,SHA512CNG无法用于XP SP2(文档错误),但SHA512MANAGED可以.


@Maxim - 谢谢,但不是我要求的.我问的是,使用给定哈希算法的Managed/CryptoServiceProvider/CNG实现,除了可能的性能之外是否存在任何差异.使用.NET 3.5,您可以获得具有三种实现的所有哈希算法,因此

SHA512Managed SHA512CryptoServiceProvider SHA512Cng

后两者是本机API的包装器.例如,对于所有SHAxxx实现都是如此.

.net c# security hash cryptography

21
推荐指数
1
解决办法
8708
查看次数

检查程序集的强名称

是否可以检查动态加载的程序集是否已使用特定的强名称签名?

比较AssemblyName.GetPublicKey()方法返回的值是否足够/安全?

Assembly loaded = Assembly.LoadFile(path);

byte[] evidenceKey = loaded.GetName().GetPublicKey();

if (evidenceKey != null)
{
    byte[] internalKey = Assembly.GetExecutingAssembly().GetName().GetPublicKey();

    if (evidenceKey.SequenceEqual(internalKey))
    {
        return extension;
    }
}
Run Code Online (Sandbox Code Playgroud)

这不能被欺骗吗?我不确定SetPublicKey()方法是否对构建的程序集有任何影响,但即使是MSDN文档也显示了如何在动态生成的程序集(反射发射)上使用它,这意味着你可以从中提取公钥.托管应用程序并将其注入您自己的程序集并运行恶意代码,如果以上是安全防范,或者我错过了什么?

有更正确和安全的方法吗?我知道如果相反的情况是这种情况,也就是说,我想要保护程序集只被签名主机调用,那么我可以使用StrongNameIdentityPermission属性标记程序集.

c# security strongname

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

本地化SQL Server(2005/2008)数据库的最佳实践

我相信很多人都面临着将数据库后端本地化到应用程序的挑战.如果你没有那么我会非常自信地说你将来必须这样做的可能性非常大.我正在谈论为您的数据库实体存储多个文本翻译(对于货币等也是如此).

例如,经典的"类别"表可能具有应该全球化的名称和描述列.一种方法是为每个实体创建一个"文本"表,然后根据提供的语言进行连接以检索值.

这将为您留下许多"文本"表,每个表对应您要本地化的每个实体,并添加一个TextType以区分它可能存储的各种文本.

我很好奇是否有任何,记录在案的最佳实践/设计模式在SQL Server 2005/2008数据库中实现这种支持(我特别关注RDBMS,因为它可能包含支持的关键字,这有助于与实施)?

关于XML方法的思考

我一直在考虑的一个想法(虽然目前只在我的脑海中)是利用SQL Server 2005中引入的XML数据类型.我们的想法是创建应该支持XML数据类型本地化的列(并将模式绑定到它) ).XML将包含本地化字符串以及它所绑定的语言代码/文化.

有点像

Product
ID (int, identity)
Name (XML ...)
Description (XML ...)
Run Code Online (Sandbox Code Playgroud)

然后你会有像XML这样的东西

<localization>
  <text culture="sv-SE">Detta är ett namn</text>
  <text culture="en-EN">This is a name</text>
</localization>
Run Code Online (Sandbox Code Playgroud)

你可以这样做(这不是生产代码所以我会用*)

SELECT *
From Product
Where Product.ID = 10
Run Code Online (Sandbox Code Playgroud)

并且您将获得所有本地化文本的产品,这意味着您必须在客户端进行提取.这里最大的问题显然是你必须在每个查询中返回的额外数据量.好处是更简洁的设计,没有查找表,连接等等.

顺便说一句,我在设计中最终使用的方法仍然是使用Linq To SQL(.NET平台)来查询数据库(XML方法应该是一个问题,因为它会返回一个可以解释为客户端的XElement-侧)

所以关于数据库本地化设计模式的建议,以及可能对XML思想的评论,都会非常有用.

sql-server database-design localization linq-to-sql

12
推荐指数
1
解决办法
5456
查看次数

在IIS 6上设置Mercurial服务器

我在Windows 2003/IIS 6计算机上设置了一个Mercurial服务器,当我尝试拉出存储库时,我得到以下序列

requesting all changes
adding changesets
adding manifests
adding file changes
transaction abort!
rollback completed
abort: premature EOF reading chunk (got 91303 bytes, expected 1542634)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几乎所有我能想到的东西,但没有成功.我按照Jeremy Skinners指南的步骤为IIS7执行此操作,但是在IIS6服务器上.

我发现了一个帖子,作者遇到了同样的问题,但无法找到解决方案.

到目前为止看起来解决方案是迁移到Apache或升级到Windows 2008/II7 ..但如果有人知道如何解决这个问题,请告诉我

windows installation hosting mercurial iis-6

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

来自对象的隐式转换运算符

我想知道是否有人可以想到一个很好的解决方法,因为无法在自己的类上为对象添加隐式强制转换操作符.以下示例说明了我想要的代码类型

public class Response
{
    public string Contents { get; set; }

    public static implicit operator Response(object source)
    {
        return new Response { Contents = source.ToString(); };
    }
}
Run Code Online (Sandbox Code Playgroud)

这将无法编译,因为它扰乱了C#编译器,它告诉我

user-defined conversions to or from a base class are not allowed
Run Code Online (Sandbox Code Playgroud)

将响应转化为响应和行动

public static implicit operator Response<T>(T source)
Run Code Online (Sandbox Code Playgroud)

遗憾的是不是一种选择.我的猜测是否定的,但任何人都可以想到一个很好的解决方法/黑客来实现这一点.我很乐意能够做到

public Response Foo()
{
   return new Bar();
}
Run Code Online (Sandbox Code Playgroud)

最后得到一个表示Whatever.Namespace.Bar的Response.Contents

c#

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

我可以在Windows Vista x64上运行Visual Studio 2008 x86吗?

是否可以在Windows Vista 64位系统上运行32位版本的Visual Studio 2008 Professional?

  • 我需要注意哪些已知的警告?
  • 是否必须安装.NET Framework的x64版本?
  • 构建针对x86的软件会有任何问题吗?
  • 是否有任何(合理的)论据来获取VS2008的x64版本而不是重用当前的x86许可证?

非常想要获得一个x64 Vista平台,以便能够利用更多的RAM :)

compatibility vista64 visual-studio-2008

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

设置usercontrol的父级可防止它透明

我已经创建了一个简单的用户控件,可以手动创建

MyUserControl ctrl = new MyUserControl();
Run Code Online (Sandbox Code Playgroud)

该控件设计为具有BackColor = Color.Transparent并且工作正常,直到我将控件的Parent设置为一个表单,此时它变成表单的颜色.

可能听起来像它的透明,但它的作用是隐藏表格上存在的所有控件.我不是百分之百确定它的控制能够获得稳固的背景或其他在我挂钩时发生的事情,这会阻止其他控件显示.

基本上如果你这样做

  • 创建表单
  • 在上面放一个按钮
  • 在按钮的单击处理程序中,执行以下操作

MyUserControl ctrl = new MyUserControl();
ctrl.Parent = this;
ctrl.BackColor = Color.Transparent;
ctrl.Size = this.Parent.ClientRectangle.Size;
ctrl.Location = this.Parent.ClientRectangle.Location;
ctrl.BringToFront();
ctrl.Show();
Run Code Online (Sandbox Code Playgroud)

基本上我希望usercontrol覆盖整个表单,同时在表单上显示底层控件(因此透明背景).我不想将它添加到窗体控件集合中,因为它并不真正属于窗体,它只是显示在其他所有内容上

我尝试做同样的事情,但没有设置父级,但控件根本没有显示.

谢谢!

编辑:如果我覆盖usercontrol中的OnPaintBackground方法并防止背景被绘制然后它工作,但是使用DrawImage在控件中绘制的PNG图像的透明部分混乱,这是有道理的.

c# user-controls transparency winforms

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

Leptonica实施的'Modified Median Cut'是否完全不使用中位数?

我正在玩图像处理,并决定阅读颜色量化的工作原理,经过一些阅读后我发现了修正中值切割量化算法.

我一直在阅读Leptonica库中C实现的代码,并且遇到了一些我觉得有点奇怪的东西.

现在我要强调的是,我不是这方面的专家,我不是数学头,所以我预测这一切都归结于我不理解所有这一切而不是算法的实现是错误的一点都不

该算法声明vbox应沿着摘要轴分割,并且应使用以下逻辑进行拆分

通过将bin与中值像素(按群体)定位,选择较长边并在该边的中心划分来划分最大轴.我们可以简单地将具有中间像素的bin放在较短的一侧,但是在细分的早期阶段,这倾向于将低密度簇(在细分中不考虑)放在相同的vbox中作为高密度的一部分即使未来基于中位数的细分,也会以中值vbox颜色进行投票的集群.这里使用的算法在早期细分中特别重要,并且3对于给出可见但低群体颜色群集它们自己的vbox是有用的.这对高密度集群的细分几乎没有影响,最终将在其vbox​​中具有大致相等的人口.

为了论证,让我们假设我们有一个vbox,我们正在分裂过程中,红轴是最大的.在Leptonica算法中,在01297行,代码似乎执行以下操作

  • 迭代所有可能的红色绿色和蓝色变化
  • 对于每次迭代,它会增加沿红轴找到的像素总数(总体)
  • 对于每种红色,它总结当前红色和先前红色的总体,从而为每个红色存储累积值

注意:当我说"红色"时,我指的是沿着轴的每个点被迭代覆盖,实际颜色可能不是红色但包含一定量的红色

因此,为了便于说明,假设我们沿红轴有9个"箱"并且它们具有以下种群

4 8 20 16 1 9 12 8 8

在迭代所有红色区后,partialsum数组将包含上述区间的以下计数

4 12 32 48 49 58 70 78 86

将有86的值

一旦完成,就应该执行实际的中值切割,而对于红轴,则在线01346执行

它迭代垃圾箱并检查它们累积的总和.这是从算法描述中抛出我的部分.它看起来在第一仓,有一个值,该值大于小于总/ 2

不会总/ 2意味着它正在寻找具有价值比大仓平均数值,而不是中位数?上述垃圾箱的中位数为49

使用4349可能会对盒子的分割方式产生巨大影响,即使算法然后通过移动到匹配值所在的较大边的中心来进行.

令我困惑的另一件事是该文件规定应该找到具有中值的bin,但是如果存在偶数个bin则不提及如何继续..中位数将是(a +的结果)b)/ 2并且不保证任何垃圾箱都包含该人口数.所以这就是让我觉得有些近似值可以忽略不计的原因,因为分裂实际上是在所选bin的较大边的中心处.

对不起,如果它有点长的啰嗦,但我想尽可能多,因为它已经让我疯了几天了;)

c algorithm math colors quantization

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

你会如何设计一个可破解的网址?

想象一下,你有一组产品类别组织在一个漂亮的树形层次结构中,你想提供可黑客的网址来浏览这些.你可以这样做

/catalog/categorya/categoryb/categoryc
Run Code Online (Sandbox Code Playgroud)

然后,您可以很容易地确定应该列出产品的类别(请注意,由于您可以使用相同名称但在层次结构中的不同位置的类别,因此需要完整的URL)

现在添加产品信息的好方法是什么呢?举个例子,您想要显示此类别的产品Oblivion

/catalog/games/consoles/playstation/adventure
Run Code Online (Sandbox Code Playgroud)

在网址末尾添加产品很诱人

/catalog/games/consoles/playstation/adventure/oblivion
Run Code Online (Sandbox Code Playgroud)

但是当你这样做的那一刻,你就失去了知道它的类别或被称为遗忘的产品的能力.我个人认为没有被迫添加后缀,如.html

/catalog/games/consoles/playstation/adventure/oblivion.html
Run Code Online (Sandbox Code Playgroud)

将是最好的解决方案并使用某种前缀,例如

/catalog/games/consoles/playstation/adventure/product:oblivion
Run Code Online (Sandbox Code Playgroud)

你也可以添加一些类似的触发器

/catalog/games/consoles/playstation/adventure/PRODUCT/oblivion
Run Code Online (Sandbox Code Playgroud)

不是那么好,你会(尽管它不太可能是一个问题)限制你自己的产品类别

到目前为止,后缀解决方案看起来像是最方便用户的方法,我可以从头脑中想到但我不喜欢使用扩展

你对此有何看法?

url usability urlhacks

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