小编Gov*_*ert的帖子

为什么不等待Task.WhenAll抛出AggregateException?

在这段代码中:

private async void button1_Click(object sender, EventArgs e) {
    try {
        await Task.WhenAll(DoLongThingAsyncEx1(), DoLongThingAsyncEx2());
    }
    catch (Exception ex) {
        // Expect AggregateException, but got InvalidTimeZoneException
    }
}

Task DoLongThingAsyncEx1() {
    return Task.Run(() => { throw new InvalidTimeZoneException(); });
}

Task DoLongThingAsyncEx2() {
    return Task.Run(() => { throw new InvalidOperation();});
}
Run Code Online (Sandbox Code Playgroud)

我期望WhenAll创建并抛出一个AggregateException,因为至少有一个等待抛出异常的任务.相反,我正在收回其中一个任务抛出的单个异常.

难道WhenAll不总是创造AggregateException

.net asynchronous exception tap

83
推荐指数
6
解决办法
3万
查看次数

Visual C++ 2010:对MSVC运行时部署的更改(不再使用清单的SxS)

在哪里可以找到一些官方说明,kb文章或其他描述Visual Studio 2010 C/C++运行时链接和部署策略更改的文档?

在Visual Studio 2008(使用VC90运行时)下,清单嵌入在本机映像中,运行时库部署为并行程序集(WinSxS).使用VS 2008 SP1重建本机exe或库时,这会导致问题,因为嵌入式清单需要更新版本的C++运行时.

对于VS 2010和MSVCR100运行时版本,策略似乎已完全更改.

  1. 文件msvcr100.dll和其他C/C++运行时库不再作为SxS程序集安装.
  2. 在VS2010下进行编译时,嵌入式清单中不会添加运行时"依赖"条目,这意味着可能会在运行时加载任何版本的msvcr100.dll.
  3. 在安装了.NET 4的计算机上,匹配的运行时名为msvcr100_clr0400.dll,并且不会被本机代码加载,但重命名为msvcr100.dll的副本可以正常工作.我认为这意味着任何使用C/C++代码的进程总是会加载两个版本的相同C/C++运行时.

这似乎是政策的一个重大变化,从SxS部署的回溯和我们在VS 2008下的清单依赖性.任何人都可以更好地了解变化的内容,并且可能指向一些文档,描述这些变化的自述文件或博客文章,动机和相关影响?

它认为这种方式更好 - 强大的版本清单和SxS部署是一场噩梦 - 但我对VS 2010中这些意外且看似无证的变化感到惊讶.

额外问题:如何在VS 2010下编译我的C++/CLI库以链接到msvcr100_clr0400.dll而不是msvcr100.dll?这个想法是C++/CLI程序集应该运行时没有.NET 4安装的依赖项(没有静态链接).

winsxs c++-cli visual-studio-2010 msvcr100.dll

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

如何创建和使用仅限.NET元数据的"参考组件"?

从3.0版开始,.NET在C:\ Program Files\Reference Assemblies\Microsoft ....下安装了许多不同的"引用程序集",以支持不同的配置文件(比如.NET 3.5客户端配置文件,Silverlight配置文件).其中每个都是一个正确的.NET程序集,只包含元数据 - 没有IL代码 - 每个程序集都标有ReferenceAssemblyAttribute.元数据仅限于适用的配置文件下可用的那些类型和成员 - 这就是intellisense显示一组受限制的类型和成员的方式.在运行时不使用引用程序集.

我从这篇博文中了解到了一些情况.

我想为我的库创建和使用这样的引用程序集.

  1. 如何创建仅元数据的程序集 - 是否有一些编译器标志或ildasm后处理器?
  2. 是否存在控制将哪些类型导出到不同"配置文件"的属性?
  3. 如何在运行时引用程序集解析 - 如果我的应用程序目录中存在引用程序集而不是'真正的'程序集,而不是GAC中的引用程序集将会探测继续并且我的AssemblyResolve事件触发,以便我可以提供在运行时实际组装?

任何想法或指示我可以了解更多关于这一点将不胜感激.

更新:环顾四周,我看到.NET 3.0'引用程序集'确实有一些代码,并且引用程序集属性仅在.NET 4.0中添加.因此,新运行时的行为可能会有所改变.

为什么?对于我的Excel-DNA(http://exceldna.codeplex.com)加载项库,我通过将引用的程序集作为资源打包到.xll文件中来创建单文件.xll加载项.打包的程序集包括用户的加载项代码,以及Excel-DNA托管库(可能由用户的程序集引用).

这听起来相当复杂,但大部分时间都运行良好 - 加载项是一个小文件,所以没有安装分发问题.由于版本不同,我遇到(并非意外)问题 - 如果Excel-DNA托管库的旧版本作为文件,运行时将加载而不是打包的(我永远不会有机会干扰加载).

我希望为我的Excel-DNA管理部分制作一个参考程序集,用户在编译它们的加载项时可以指向它.但是如果他们在运行时错误地拥有了这个程序集的一个版本,那么运行时应该无法加载它,并让我有机会从资源加载真正的程序集.

.net c# assemblies

24
推荐指数
1
解决办法
4509
查看次数

如何检查当前用户是否有权重新启动Windows服务?

如何检查用户是否有权启动/停止特定的Windows服务,而不实际停止或启动它?

问题不在于授予向用户重新启动服务的权限(例如,使用subinacl.exe):我想检查用户是否是管理员,或者是否已被授予重新启动服务的权限.

c# permissions windows-services

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

ssl certificate-从csr获取私钥

是否可以从中导出私钥CERTIFICATE SIGNING REQUEST

我有一个CSR文件和一些CRT文件.现在我必须安装此证书.我该怎么做或是否需要一些其他文件才能安装此证书

ssl openssl certificate ssl-certificate

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

Xamarin SQLite PCL实现

我正在用PCL创建一个Xamarin应用程序,我想在PCL中使用SQLite在平台特定项目中共享数据库代码.

我已经研究过Tasky Portable项目,他们使用抽象类来实现这个目标.我在实现这个方法时遇到了一些麻烦,这就是为什么我在寻找另一种在PCL中使用SQLite的解决方案.我偶然发现了一篇Xamarin Forms文章,他们使用SQLite PCL NuGet包在PCL中实现它.

由于我没有使用Xamarin Forms,这两种方法有什么区别?NuGet包解决方案是否也可用于在PCL中实现SQLite而无需使用Xamarin Forms?这个方法似乎比抽象类简单得多.

c# sqlite portable-class-library xamarin

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

对于Shape类型,WPF DataTemplate失败

我正在尝试设置将用于Line(System.Windows.Shapes.Line)对象的WPF DataTemplate .

从默认的.NET 4 WPF应用程序,我将我的Window xaml设置为:

<Window x:Class="WpfTestDataTemplates.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:system="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <DataTemplate DataType="{x:Type system:String}" >
            <TextBlock>It's a string</TextBlock>
        </DataTemplate>
        <DataTemplate DataType="{x:Type Line}" >
            <TextBlock>It's a line</TextBlock>
        </DataTemplate>    
    </Window.Resources>

    <ListView ItemsSource="{Binding MyItems}" />
</Window>
Run Code Online (Sandbox Code Playgroud)

而背后的代码是:

using System.Collections.Generic;
using System.Windows;
using System.Windows.Shapes;

namespace WpfTestDataTemplates
{
    public partial class MainWindow : Window
    {
        public List<object> MyItems {get; set; }

        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;

            MyItems = new List<object>();
            MyItems.Add("The first string");
            MyItems.Add(new …
Run Code Online (Sandbox Code Playgroud)

wpf datatemplate

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