javascript

git

java

python

git-remote

c++

github

django

c#

reactjs

c++-faq

git-checkout

generator

coroutine

spring-mvc

reflection

javascript-objects

html5

analytics

node.js

设计模式-IObservable vs普通事件,或者为什么应该使用IObservable?

微软通过.NET Framework 4向BCL引入了IObservable<T>接口,我想:“太好了,最后,我必须使用它!” 因此,我深入研究并阅读了帖子和文档,甚至实现了该模式。

这样做之后,我意识到基本实现实际上将所有T事件发送给所有订阅者,而没有对其进行任何过滤。 即纯广播。 我在某处读到Observable模式是用于普通广播的。 我觉得这是不正确的,我缺少了一些东西。

我的问题:

  1. 如果添加过滤机制,则使用Observable模式与仅使用普通CLR事件有什么区别?

  2. 什么时候应该使用这种模式,什么时候应该选择使用普通的CLR事件?

  3. 可观察模式的主要优点是什么?

trans by 2020-08-12T10:28:49Z

.net-使用任务并行库时如何处理所有未处理的异常?

我在.NET 4.0中使用TPL(任务并行库)。 我想通过使用AggregateException事件集中所有未处理的异常的处理逻辑。 但是,在我的应用程序中,永远不会为以TPL代码开头的线程触发该事件。 Task.Factory.StartNew(...).如果我使用类似new Thread(threadStart).Start()的事件,则确实会触发该事件。

此MSDN文章建议在使用TPL时使用Task.Wait()来捕获AggregateException,但这不是我想要的,因为此机制不够“集中”。

有人遇到过同样的问题吗?还是只有我一个人? 您对此有什么解决方案吗?

trans by 2020-08-11T18:27:21Z

可以将字符串用作锁定对象吗?

我需要根据一组有限的字符串在一个区域中做一个关键部分。 我希望为同一字符串实例共享该锁(有点类似于String.Intern方法)。

我正在考虑以下实施:

public class Foo
{
    private readonly string _s;
    private static readonly HashSet<string> _locks = new HashSet<string>();

    public Foo(string s)
    {
        _s = s;
        _locks.Add(s);
    }

    public void LockMethod()
    {
        lock(_locks.Single(l => l == _s))
        {
            ...
        }
    }
}

这种方法有什么问题吗? 以这种方式锁定字符串对象是否可以,并且在使用Dictionary<string, object>时是否存在线程安全问题?

例如,创建一个Dictionary<string, object>为每个字符串实例创建一个新的锁定对象,这会更好吗?


最终实施

根据建议,我进行了以下实现:

public class Foo
{
    private readonly string _s;
    private static readonly ConcurrentDictionary<string, object> _locks = new ConcurrentDictionary<string, object>();

    public Foo(string s)
    {
        _s = s;
    }

    public void LockMethod()
    {
        lock(_locks.GetOrAdd(_s, _ => new object()))
        {
            ...
        }
    }
}
trans by 2020-08-10T11:19:02Z

.NET 4.0-CultureNotFoundException

我已经将我的ASP.NET MVC 2项目迁移到VS 2010 + .NET 4.0。现在,当我启动应用程序时,我在IntelliTrace和“输出/ Gebug”窗口中看到很多“ CultureNotFoundException”:

mscorlib.dll中发生类型'System.Globalization.CultureNotFoundException'的第一次机会异常

我知道“第一次机会异常”的含义,但是当我尝试调试(将“ CultureNotFoundException”添加到Bebug / Exceptions [Thrown])中时为什么会这样。 抛出此详细异常文本:

发生System.Globalization.CultureNotFoundException 不支持Message = Culture。 参数名称:名称 设计器是无效的文化标识符。 来源= mscorlib ParamName =名称 InvalidCultureName =设计师 堆栈跟踪: 在System.Globalization.CultureInfo..ctor处(字符串名称,布尔值useUserOverride) InnerException:

我想知道为什么.NET试图创建名称为“ designer”的CultureInfo?

是不是虫子?

trans by 2020-08-07T02:53:34Z

验证-Microsoft Code Contracts框架有多成熟?

微软最近已通过商业许可证在DevLabs上发布了其代码合同框架。 我们有兴趣在我们的项目(主要是C#,一些C ++ / CLI)中使用它们来逐步替换所有自定义验证代码,但是我很想知道其他人在使用它之前的经验, 特别:

  • 您认为该框架对于大型和复杂的商业项目是否足够成熟?

  • 使用时遇到什么问题?

  • 您从中获得了什么好处?

  • 目前是否比其应有的痛苦还要多?

我意识到这是一个有点主观的问题,因为它需要意见,但是鉴于此框架是.NET 4.0的重要组成部分,并且(有可能)改变我们编写验证代码的方式,所以我希望这个问题可以解决。 愿意收集有关该主题的经验,以帮助我做出一个具体的,可回答的问题的决定:

我们应该在下个月开始使用它吗?

请注意,我们不提供代码API,仅提供一种Web服务,因此对于大多数代码而言,就抛出的异常类型而言,破坏兼容性并不重要。 但是,由于我希望更多的人将从中受益,而这方面的任何细节都将受到欢迎。

trans by 2020-08-03T09:12:15Z

c#-WPF中的文件选择器对话框在哪里?

[HTTP://i.minus.com/i3徐哦WZ KP发现HN.PNG]

我看不到任何可以让我从计算机中选择文件的东西……必须有一个,它在哪里? 我可能缺少参考?


编辑:我想到的是一个旁边带有“浏览”按钮的文本框。 现在我想到,我可能不得不自己放置文本框并浏览按钮,并向按钮添加click事件以打开对话框。

trans by 2020-08-03T06:20:28Z

.NET 4 GUID如何生成?

我知道这里有很多问题,还有雷蒙德(Raymond)出色的(与往常一样)帖子。 但是,由于创建GUID的算法已发生明显变化,因此我发现很难获得任何最新信息。 MSDN似乎尝试提供尽可能少的信息。

关于.NET 4中GUID的生成方式有什么了解? 发生了什么变化,它如何影响安全性(“随机性”)和完整性(“唯一性”)?

我感兴趣的一个特定方面:在v1中,由于涉及时间戳和计数器,因此似乎不可能在一台计算机上再次生成相同的GUID。 在v4中,情况不再如此(有人告诉我),所以在单台计算机上获得相同GUID的机会增加了吗?

trans by 2020-08-02T10:31:55Z

c#-.NET 4 Web应用程序首选System.Web.Caching还是System.Runtime.Caching

我将缓存添加到ASP.NET Web应用程序。 这是.NET 4,因此我可以使用System.Runtime.Caching命名空间中的类(据我了解,它是为了提供与System.Web.Caching中类似的功能而添加的,但对于非Web- 应用。)

但是,由于这是一个Web应用程序,因此我最好使用System.Web.Caching吗? 还是较新的System.Runtime.Caching在某种程度上更出色?

trans by 2020-07-27T08:50:38Z

C#-诠释TryParse语法糖

int.TryPrase很棒,而且也很不错,但是只有一个问题...至少需要两行代码才能使用:

int intValue;
string stringValue = "123";
int.TryParse(stringValue, out intValue);
....

我当然可以做类似的事情:

string stringValue = "123";
int intValue = Convert.ToInt32(string.IsNullOrWhiteSpace(stringValue) ? 0 : stringValue); 

只需一行代码。

我如何执行一些魔术操作以获得int.TryParse来使用一个衬板,或者那里还存在第三种选择?

谢谢!

Bezden最好地回答了这个问题,但实际上我计划使用Reddogs解决方案。

trans by 2020-07-27T03:28:33Z

到ConcurrentDictionary值的linq查询是线程安全的吗?

假设我有以下代码:

ConcurrentDictionary<long, long> myDict= new ConcurrentDictionary<long, long>();

通常,每次通过键访问都是线程安全的,但是以下linq查询线程也是安全的吗?我没有在文档中找到任何东西:[http://msdn.microsoft.com/en-us/library/dd287226.aspx]

if myDict.Values.Any(x => !x.HasPaid))
{
  return false
}
trans by 2020-07-25T15:37:43Z

我如何将GZipStream与System.IO.MemoryStream一起使用?

我在使用此测试函数时遇到了一个问题,在该函数中,我输入一个内存字符串,然后对其进行压缩和解压缩。 压缩效果很好,但是我似乎无法进行解压缩。

//Compress
System.IO.MemoryStream outStream = new System.IO.MemoryStream();                
GZipStream tinyStream = new GZipStream(outStream, CompressionMode.Compress);
mStream.Position = 0;
mStream.CopyTo(tinyStream);

//Decompress    
outStream.Position = 0;
GZipStream bigStream = new GZipStream(outStream, CompressionMode.Decompress);
System.IO.MemoryStream bigStreamOut = new System.IO.MemoryStream();
bigStream.CopyTo(bigStreamOut);

//Results:
//bigStreamOut.Length == 0
//outStream.Position == the end of the stream.

我相信bigStream out至少应该包含数据,尤其是在读取我的源流(outStream)的情况下。 这是MSFT错误还是我的?

trans by 2020-07-20T13:39:09Z

.Net Framework 4.0安装程序是否包括.Net Framework 3.5?

根据.Net Framework 3.5编译的.Net组件是否可以在仅安装.Net Framework 4.0的系统上运行?

换句话说,.Net Framework 4.0安装程序是否包括.Net Framework 3.5?

trans by 2020-07-20T10:30:10Z

NET 4.0中的MemoryCache与ObjectCache有什么区别?

.NET Framework 4.0 MemoryCacheObjectCache和有什么区别?在哪里使用哪个对象?

trans by 2020-07-12T16:27:29Z

IIS 7-无法识别的属性“ targetframework”

可能重复:
无法识别的属性“ targetFramework”。 请注意,属性名称区分大小写

首先,让我说,我知道这个问题已经在此站点上问过几次了,但是所有这些问题的答案都不能解决我的问题。

我尝试在IIS7中添加新的托管处理程序时遇到以下问题:

无法识别的属性“ targetFramework”。 请注意,属性名称 区分大小写。

环境是安装了IIS7的Windows Server Enterprise 2008 SP1。

我的应用程序正在使用.NET 4.0。 在IIS之后安装了.NET框架:

我尝试过/检查了以下内容:

  • 我的应用程序池使用的是.NET 4.0(我安装了一个.NET 4.0版本,没有beta版等)。
  • 确保使用'aspnet_regiis.exe -iru'向IIS正确注册.NET 4.0。
  • 回收了应用程序池,重新启动了计算机。
  • 完全卸载.NET 4.0,然后重新安装它。
  • 删除了'targetFramework'属性-这只会在其他地方导致崩溃。

在我看来,即使我在IIS中的应用程序池告诉我它们正在使用.NET 4.0,IIS仍以某种方式仍引用.NET的早期版本。

我的网站加载正常,但是由于这个问题,我无法设置自定义图像处理程序。

我将不胜感激任何建议。

谢谢。

更新

这太疯狂了。我已经完全从零开始对环境进行了重建:

  • 从MSDN下载“没有Hyper V SP1的Windows Server Enterprise”。
  • 安装.NET 4.0
  • 安装ASP.NET MVC 3
  • 添加“ Web服务器”角色-确保应用程序池正在使用.NET 4.0
  • 部署我的项目

当我尝试添加自定义Hanlder映射时,会发生相同的错误。 我在做某事不正确/完全愚蠢,或者此设置中的IIS7存在一些问题。 即使我的应用程序池设置为使用.NET 4.0,IIS也无法从.NET 4.0中识别出'targetFramework'属性。

如果我使用命令“ aspnet_regiis -lv”,它将告诉我只有.NET 4向IIS注册。

trans by 2020-07-11T21:18:38Z

winapi-CI服务器上的MSBuild找不到AL.ex

我在TeamCity CI构建服务器上遇到问题,在编译期间出现以下错误:

C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(2342,9):错误MSB3086:使用SdkToolsPath“”或注册表项“ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A”。 确保已设置SdkToolsPath,并且该工具位于SdkToolsPath下正确的处理器特定位置,并且已安装Microsoft Windows SDK

从一年前人们升级到.NET 3.5时,我发现了类似的报告,例如此报告。 在那种情况下,安装最新的SDK可以解决问题,但是我已经在构建服务器上安装了最新的SDK(用于Windows 7和.NET Framework 4的Microsoft Windows SDK)。 MSBuild工具都在服务器上的所有文件夹中,都位于一个名为

Ц:ювиндовсюмицрософт.Нетюфрамеворкювч.0.30319

并且AL.exe存在于

C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ NETFX 4.0工具

但是,错误消息中提到的注册表项不存在。 因此,似乎MSBuild的安装/配置有问题。 此错误仅发生在具有嵌入式资源且需要AL.exe的项目中。

trans by 2020-07-11T10:40:19Z

gac-.NET Framework全局程序集缓存在哪里?

我安装了VS2010和.NET 4.0,然后编译了一个程序集,并使用提供的exe运行了gacutil。

%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools

可执行文件的输出表示该程序集已成功安装在Global Assembly Cache上。 但是,当我转到%WINDIR%\assembly文件夹时,找不到使用.NET Framework 4.0 gacutil安装的程序集。

我看到一些帖子说.NET Framework 4.0具有单独的GAC,但是我还没有找到它的位置。

可以帮助我检查在哪里可以看到.NET Framework的全局程序集缓存,因为它曾经在以前的版本(%WINDIR%\assembly)上运行?

trans by 2020-07-08T16:26:52Z

在.NET 4.0(C#)中动态实现接口

借助.NET 4.0中的新动态功能,似乎应该有可能动态实现一个接口,例如 给出:

public interface IFoo 
{
    string Bar(int baz);
}

public class Foo : IFoo
{
    public string Bar(int baz) { return baz.ToString(); }
}

public class Proxy : IDynamicMetaObjectProvider
{
    private readonly object target;

    public Proxy(object target) { this.target = target; }

    // something clever goes here
}

然后,我希望有某种方法可以编写:

dynamic proxy = new Proxy(new Foo());
IFoo fooProxy = (IFoo)proxy; // because the target object implements it
string bar = fooProxy.Bar(123); // delegates through to the target implementation

但是,到目前为止,我不确定用什么替换// something clever goes here

因此,我的问题是:

  1. 这实际上与动态运行时有关吗? 动态实现方法和属性之类的东西似乎很容易,但是我还没有找到任何有关动态实现接口和对其进行转换的文档。

  2. 假设这是可能的,那么可能会有多困难? (您可以假设我是一个体面的程序员,对反射之类的东西有丰富的经验,但是对于动态框架却是新知识。)

  3. 是否有任何资源可以帮助我指出实施此类目标的正确方向? 甚至是已经完成此类事情的样本,我都可以以此为起点?

trans by 2020-07-04T05:56:40Z

.net 4.0-C#4是否以以前的C#版本没有的方式优化了名称空间?

这个问题是出于兴趣。 我正在使用第三方库,并且在CMS.Security.Dummy类上遇到了以下文档:

不要删除该类-此类阻止编译器执行以下操作: 在.NET 4.0下删除整个命名空间。

是否有人知道或有人推测如果删除了伪类,.NET 4为什么会删除命名空间?

由于.NET 4是在源代码注释中显式命名的,因此我假定以前的C#版本表现出不需要此伪类的行为。 不过,这纯粹是猜测。

屏幕截图

documentation

反编译的源代码

#region Assembly CMS.SettingsProvider.dll, v4.0.30319
// ...\solution\wwwroot\Bin\CMS.SettingsProvider.dll
#endregion

using System;

namespace CMS.Security
{
    // Summary:
    //     DO NOT DELETE THIS CLASS - This class prevents the compiler from dropping
    //     entire namespace under .NET 4.0.
    public class Dummy
    {
        // Summary:
        //     DO NOT DELETE THIS CLASS - This class prevents the compiler from dropping
        //     entire namespace under .NET 4.0.
        public Dummy();
    }
}
trans by 2020-07-01T19:36:13Z

c#-在.NET 4.0中,如何“沙盒化”内存中的程序集并执行方法?

提出此问题的原因如下:www.devplusplus.com/Tests/CSharp/Hello_World。

虽然之前也曾问过类似的问题,但在线上的许多答案都有几个问题:

  1. 这必须以“ .Net 4.0”样式完成,而不是传统模式。
  2. 程序集在内存中,并且仅在内存中,无法将其写入文件系统。
  3. 我想限制对文件系统,网络等的所有访问。

像这样:

    var evidence = new Evidence();
    evidence.AddHostEvidence(new Zone(SecurityZone.Internet));
    var permissionSet = SecurityManager.GetStandardSandbox(evidence);

到目前为止,我还没有找到一种创建AppDomain并加载程序集的方法,该方法不在文件系统上,而是在RAM中。

再次指出,其他解决方案不起作用的原因已在上面指出:1.许多解决方案适用于4.0之前的版本;以及2.许多依靠指向文件系统的“ .Load”方法。

答案2:我有一个程序集引用,因为它是由2936965929412068368352类生成的,因此,如果您知道将其转换为字节数组的方法,那就太完美了!

显示安全缺陷的示例代码

var provider = new CSharpCodeProvider(new Dictionary<String, String>
    { { "CompilerVersion", "v4.0" } });

var compilerparams = new CompilerParameters
    { GenerateExecutable = false, GenerateInMemory = true, };

var compilerResults = provider.CompileAssemblyFromSource(compilerparams,
    string_Of_Code_From_A_User);

var instanceOfSomeClass = compilerResults.CompiledAssembly
    .CreateInstance(className);

// The 'DoSomething' method can write to the file system and I don't like that!
instanceOfSomeClass.GetType().GetMethod("DoSomething")
    .Invoke(instanceOfSomeClass, null);

那么为什么不能先将程序集保存到文件中呢?

有两个原因:

  1. 此代码位于对文件系统本身具有有限权限的共享Web服务器上。
  2. 这段代码可能需要运行数千次,而且我暂时不需要1,000个dll。
trans by 2020-06-24T10:29:34Z

c#-为什么您无法捕获代码合同异常?

我的测试项目中无法访问System.Diagnostics.Contracts.ContractException。 请注意,这段代码纯粹是我自己在纠缠着我崭新的Visual Studio副本,但是我想知道自己在做错什么。

我使用的是VS专业版,因此没有静态检查。 为了仍然使用代码契约(我喜欢),我认为我的方法可以工作的唯一方法是捕获在运行时引发的异常,但是我找不到这种可能。

测试方法

[TestMethod, ExpectedException(typeof(System.Diagnostics.Contracts.ContractException))]
public void returning_a_value_less_than_one_throws_exception()
{
    var person = new Person();
    person.Number();
}

方法

public int Number()
{
    Contract.Ensures(Contract.Result<int>() >= 0);
    return -1;
}

错误

Error 1 'System.Diagnostics.Contracts.ContractException' is inaccessible
due to its protection level.

编辑

经过更多的思考之后,我得出了评论中以及以下内容中讨论的结论。 给定一个方法,如果有一个可以以代码合同形式表达的要求,我将这样编写测试。

[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void value_input_must_be_greater_than_zero()
{
    // Arrange
    var person = new Person();
    // Act
    person.Number(-1);
}

这样可以确保合同是代码的一部分,并且不会被删除。 但是,这将要求代码合同实际引发指定的异常。 在某些情况下,这不是必需的。

trans by 2020-06-20T07:30:42Z

1 2 3 4 5 6 下一页 共6页