我有以下界面,我正在尝试使COM可见.当我尝试生成类型库时,它不喜欢我的实现类派生自泛型类的事实.
是否可以将泛型类用作COM实现类?(我知道我可以编写一个非通用的包装器并将其导出到COM,但是这会添加另一个我宁愿不用的层.)
[ComVisible(true)]
public interface IMyClass
{
...
}
[ComVisible(true), ComDefaultInterface(typeof(IMyClass))]
[ClassInterface(ClassInterfaceType.None)]
public class MyClass : BaseClass<IMyClass>, IMyClass
{
...
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
Warning: Type library exporter encountered a type that derives from a generic class and is not marked as [ClassInterface(ClassInterfaceType.None)]. Class interfaces cannot be exposed for such types. Consider marking the type with [ClassInterface(ClassInterfaceType.None)] and exposing an explicit interface as the default interface to COM using the ComDefaultInterface attribute.
假设您有一组Foo类:
class Foo
{
public string Bar;
public string Baz;
}
List<Foo> foolist;
Run Code Online (Sandbox Code Playgroud)
并且您想要检查此集合以查看是否有其他条目匹配Bar.
bool isDuplicate = false;
foreach (Foo f in foolist)
{
if (f.Bar == SomeBar)
{
isDuplicate = true;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
Contains() 不起作用,因为它将类比较为整体.
有没有人有更好的方法来做这个适用于.NET 2.0?
简介: C#/ .NET应该是垃圾回收.C#有一个析构函数,用于清理资源.当一个对象A被垃圾收集在同一行我试图克隆其变量成员之一时会发生什么?显然,在多处理器上,有时,垃圾收集器赢了......
问题
今天,在关于C#的培训课程中,老师向我们展示了一些仅在多处理器上运行时才包含错误的代码.
我将总结一下,有时候,编译器或JIT通过在从被调用方法返回之前调用C#类对象的终结器来搞砸.
在Visual C++ 2005文档中给出的完整代码将作为"答案"发布,以避免提出非常大的问题,但基本要点如下:
以下类具有"Hash"属性,该属性将返回内部数组的克隆副本.在构造中,数组的第一项值为2.在析构函数中,其值设置为零.
关键是:如果你试图得到"示例"的"哈希"属性,你将获得一个干净的数组副本,其第一个项目仍然是2,因为正在使用该对象(因此,不是垃圾收集/定稿):
public class Example
{
private int nValue;
public int N { get { return nValue; } }
// The Hash property is slower because it clones an array. When
// KeepAlive is not used, the finalizer sometimes runs before
// the Hash property value is read.
private byte[] hashValue;
public byte[] Hash { get { return (byte[])hashValue.Clone(); } }
public Example()
{
nValue = 2;
hashValue = new byte[20]; …Run Code Online (Sandbox Code Playgroud) 主要Ruby VM有哪些优点/缺点(比如功能,兼容性,性能和怪癖?)我知道还有一些额外的功能,比如能够通过JRuby使用Java接口.这些也有助于注意.在这一点上,任何VM都有明显的优势吗?在什么情况下?
在哪里可以找到用于将Perl数据结构转换为JavaScript数据结构的Perl模块?
这是我的代码(梅森):
% # convert our @cti data structure into a javascript one
var cti = [
% foreach my $cti_category (@cti) {
{
label: "<% $cti_category->{'label'} %>",
value: "<% $cti_category->{'value'} %>",
children: [
% foreach my $cti_type (@{$cti_category->{'children'}}) {
{
label: "<% $cti_type->{'label'} %>",
value: "<% $cti_type->{'value'} %>",
},
% }
]
},
% }
];
Run Code Online (Sandbox Code Playgroud)
有这个模块吗?
我正在尝试加密.Net应用程序的Web.Config中的"system.web.membership"元素,以保护Active Directory的用户名和密码.我正在使用aspnet_regiis命令进行加密,并为"pe"选项的值尝试了几个不同的字符串但没有成功.我已成功加密web.config上的"connectionstrings"元素.
CMD
C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pe "connectionStrings" -site MySite -app /MyApp Encrypting configuration section... Succeeded! C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pe "membership" -site MySite -app /MyApp Encrypting configuration section... The configuration section 'membership' was not found. Failed! C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pe "system.web.membership" -site MySite -app /MyApp Encrypting configuration section... The configuration section 'system.web.membership' was not found. Failed!
Web.Config中
<configuration>
...
<system.web>
...
<authentication mode="Forms">
<forms name=".ADAuthCookie"
timeout="30"/>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
<membership defaultProvider="MyADMembershipProvider">
<providers>
<add name="MyADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString" …Run Code Online (Sandbox Code Playgroud) 我有一个VS2008部署项目,它为几个Windows服务构建了一个安装程序.
每个服务引用几个不同的项目:
CustomerName.MailSendingService -> CustomerName.Network -> CustomerName.Data -> CustomerName.Security CustomerName.ProductIntegrationService -> CustomerName.Core -> CustomerName.Security
Windows服务项目,它们引用的项目以及部署项目都在同一个VS2008解决方案中.
我在部署项目的文件系统编辑器中添加了Windows服务项目的主要输出.
我的期望是Windows服务项目的主要输出将包括来自引用项目的DLL.但是,在构建部署项目时,缺少其中一个引用项目的DLL.(CustomerName.ProductIntegrationService缺失CustomerName.Security)
疯狂地,存在由Windows服务引用的其他项目的DLL; 只缺少一个项目的输出.
(编辑)我已经验证了引用在参考属性窗口中设置为Copy Local.引用项目的DLL放在Windows服务项目的bin\Release文件夹中,但未打包在为部署项目构建的MSI文件中.
(编辑2)根据Joseph Daigle的建议,我检查了依赖项是在主要输出的依赖项列表中,并且它没有标记为"排除",因此这似乎不是导致此问题的原因.
为什么只丢失一个项目的输出?
这可能是一个愚蠢的问题,但如果有更好或更好的方法来做到这一点,我很乐意学习它.
我已经碰过这几次,包括最近,我的HTML页面的渲染版本中出现了小空格.直觉上我认为这些不应该存在,因为在文本或实体之外,页面HTML的格式化应该无关紧要,但显然确实如此.
我所指的是这个 - 我从客户端获得了一些关于他们希望他们的网站看起来如何的Photoshop文件.他们希望它看起来基本上像这个文件中的图像像素.
页面中的一个位置需要一个菜单栏,每个位置都会在悬停时更改位,就像一个超链接等.在Photoshop文件中这是一个长条,所以一个便宜又简单的方法是将该段拆分为多个图像,然后将它们放在文件中.
所以我本能地将它列出来(有更多内容,但这是要点)
<a href="page1.html">
<img src="image1.png" />
</a>
<a href="page2.html">
<img src="image2.png" />
</a>
<a href="page3.html">
<img src="image3.png" />
</a>
Run Code Online (Sandbox Code Playgroud)
等等.
问题是图像之间有这么小的空间,这是不可接受的,因为客户希望这个像素完美(并且它看起来很简单).
让它正确渲染的一种方法是删除图像之间的回车
<a href="page1.html">
<img src="image1.png" />
</a>
<a href="page2.html">
<img src="image2.png" />
</a>
<a href="page3.html">
<img src="image3.png" />
</a>
Run Code Online (Sandbox Code Playgroud)
这使得图像相互对立(所需的效果),但它使得线条非常长并且代码更难以维护(它包含在SO中,这是一个简化版本 - 真正的文件名和JavaScript更长撒在做徘徊).
在我看来,这不应该发生,但它看起来像HTML中的回车被渲染为一个小的空白空间.这种情况发生在所有浏览器中,看起来像.
我认为上面的两个片段应该是一样的是对还是错?有什么我做错了吗?也许用错误的编码保存文件?我应该让这些链接中的每一个都成为一个完美定位的CSS元素吗?
我总是觉得期望定期抛出异常并将它们用作流逻辑是一件坏事.例外情况应该是,他们应该是" 例外 ".如果你期望并计划一个异常,这似乎表明你的代码应该被重构,至少在.NET中......
但是.最近的一个场景让我停下来.我刚刚在msdn上发布了这个,但是我想对它进行更多的讨论,这是一个完美的地方!
所以,假设你有一个数据库表,其中有几个其他表的外键(在最初提示辩论的情况下,有4个外键指向它).您希望允许用户删除,但仅限于没有外键引用; 你不想级联删除.
我通常只是检查是否有任何引用,如果有,我通知用户而不是删除.在LINQ中编写它是非常容易和轻松的,因为相关表是对象的成员,所以Section.Projects和Section.Categories等等很好用intellisense和所有类型...
但事实是LINQ然后必须潜在地检查所有4个表以查看是否有任何结果行指向该记录,并且命中数据库显然总是相对昂贵的操作.
这个项目的负责人让我把它改成只捕获一个代码为547(外键约束)的SqlException并以这种方式处理它.
我......
抗拒.
但是在这种情况下,吞下与异常相关的开销可能比吞下4个表命中更有效...特别是因为我们必须在每种情况下进行检查,但我们在这种情况下没有例外当没有孩子的时候......
加上数据库真的应该是负责处理参照完整性的人,这是它的工作而且做得很好......
所以他们赢了,我改变了它.
在某种程度上,我觉得我觉得不对.
你们对期望和故意处理异常有什么看法?它看起来比预先检查更有效吗?对于下一个查看代码的开发人员来说,更令人困惑的是它更令人困惑吗?它是否更安全,因为数据库可能知道开发人员可能不会考虑添加检查的新外键约束?或者是关于你认为最佳实践究竟是什么的观点?
.net ×5
c# ×2
perl ×2
.net-2.0 ×1
com ×1
compression ×1
comvisible ×1
css ×1
encryption ×1
file-io ×1
finalization ×1
generics ×1
html ×1
ironruby ×1
javascript ×1
jruby ×1
json ×1
layout ×1
mason ×1
rubinius ×1
ruby ×1
search ×1
sql ×1
sql-server ×1
web-config ×1