问题标签 [base-class-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 将 Microsoft.Bcl.Async 与代码分析一起使用会导致错误
我正在尝试使用Microsoft.Bcl.Async
和代码分析,但是当我运行代码分析时,我得到一个或多个错误。
我正在使用带有更新 2 的 Visual Studio 2012。
这对我来说很容易重现:
- 创建一个新的默认控制台应用程序,以
.Net 4
. - 右键单击
References
然后选择Manage NuGet Packages...
- 单击
Online
并async
在Search Online
框中键入。 - 你应该看到
Async for .Net Framework 4 ...
。单击Install
并接受所有问题。 - 添加到
Main()
显示以下内容的行:TaskEx.Delay(1000);
和using System.Threading.Tasks;
- 转到项目属性,代码分析部分并打勾
Enable Code Analysis on Build
。 - 编译程序。
我收到两个代码分析错误:
CA0052 错误运行代码分析 CA0052:没有选择目标。[错误和警告](全球)
CA0055 错误运行代码分析 CA0055:无法加载 ConsoleApplication2.exe。读取模块“ConsoleApplication2”时遇到以下错误:无法解析成员引用:[Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]System.Threading.Tasks.TaskEx::Delay。[错误和警告](全球)
对于其他测试程序,我得到不同的代码分析错误。我试过的一个基本的 Windows 窗体应用程序给了我:
CA0001 错误运行代码分析 CA0001:读取模块“AsyncForNet4”时遇到以下错误:无法解析成员引用:[Microsoft.Threading.Tasks,Version=1.0.12.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a]System.Threading。 Tasks.TaskEx::延迟。[错误和警告](全球)
两个问题:
- 其他人可以重现这个问题吗?
- 有没有人有解决方案?
c# - 在 HttpClientHandler 可移植类库 (PCL) 中设置代理时找不到方法
我正在使用Microsoft HTTP 客户端库 - PCL(通过 NuGet 安装)与公共 REST API 进行通信。因为我在企业防火墙后面,所以我需要在 HttpClientHandler 上配置代理信息。
但是,在 HttpClientHandler 上设置代理时,会引发以下错误:
找不到方法:'无效 System.Net.Http.HttpClientHandler.set_Proxy(System.Net.IWebProxy)'。
我的代码没有什么特别的,所以我有点疑惑:
一些注意事项:
- 我已经成功地将标准.Net 库(即不是PCL)中的HttpClientHandler 用于另一个项目,所以我知道代理信息是正确的。
- 当绕过代理(即在公司网络之外,或没有代理)时,我已经成功检索到数据。
- DefaultProxy 实现 IWebProxy。
.net - 忽略 CIL 编译器中的溢出检查(尤其是 Mono BCL)
我正在开发一个系统,该系统在开发时将一整套 .NET 程序集“烘焙”为本机代码。理想情况下,它会直接输出机器语言,但为了省去处理寄存器着色、针对不同目标平台的不同机器代码等的麻烦,我选择让它输出 C 代码,然后使用现有的编译器将其编译为 ML。
这引入的一个问题是整数数学运算的溢出检查不能在 C 代码中有效地执行。某些 CIL 指令——即带有.ovf
后缀的指令,明确地检查溢出。 另一个问题的众多答案提出了在 C 中进行此类检查的各种技术,但与 JIT 编译器可能输出的机器代码(例如,jo
或into
在英特尔上)相比,它们的性能都非常差。
考虑到应用程序对性能非常关键,很容易忽略.ovf
这些指令并发出与未检查变体相同的 C 代码。根据 ECMA-335 严格来说,这当然会破坏我的 CLI 实现,但我想知道它是否真的会在实践中被破坏。
我的印象是这些检查主要用于程序调试。在使用我的 CLI 的上下文中,该程序已经调试过了,并且它没有控制核弹头(反正不是真正的核弹头。)
该系统主要用于我们自己的代码,这些代码都不依赖于溢出检查的正确性。(据此,这将是一种糟糕的形式。)我关心的主要是我们可能链接到的 .NET 类库,我的系统当然也必须处理这些类库。
在我预见到必须链接的所有代码中,我主要关心的是 Mono 附带的 BCL。我们正在考虑使用该 BCL,因为它已经是现成的并且获得了自由许可。但是,当我从 Mono 对 System.dll 进行 IL 转储时,我发现它充满了.ovf
指令(其中许多是conv.ovf
,可以在 C 中像在 ML 中一样高效地实现,但有些是在算术上。)
Mono 的 BCL 实际上是否会依赖于任何这些检查的正确性,或者它们只是对于已经被认为是健全的代码可以安全地忽略的健全性检查?(我期待后者,但我想我会问,以防其他人知道得更好。)
c# - 如何在 .NET 4.0 项目中使用 HttpClient 和 System.Net.Http.dll?
我在我的解决方案中使用了 HttpClient。该解决方案针对 .NET 4.0,因为 WinXP 客户无法安装 .NET 4.5。在我签入我的更改后,TFS 报告未找到 System.Net.dll。我发现了问题所在 - dll 仅适用于 .NET 4.5。否则,您应该为 HttpClient 使用 Nuget 包。后者依赖于 Microsoft.Bcl.Async 包。我无法使用我的 NuGet 包管理器(最新版本 2.6)安装它:
什么会导致这些问题?我如何安装软件包?
- VS2012 更新 3
- NuGet 2.6.40627.9000
- 解决方案目标:.NET 4.0
更新 已经卸载了一些VS扩展,尤其是:
关闭所有与 TFS 相关的工具窗口,然后重新启动 VS,它就可以工作了。
但是,我会更多地了解错误消息的含义和原因。
c# - 为什么我在使用 Microsoft.Bcl 时不能在我的 Windows Phone 7.1 MvvmCross 项目中使用 await 关键字 - 不能等待'System.Threading.Tasks.Task?
在使用 Microsoft.Bcl“Microsoft BCL Portability Pack”时,我无法在 MvvmCross Windows Phone 7.1 项目中使用 await 关键字。
我已经在 GitHub 上发布了我在下面描述的示例项目的代码,并且在这一行发生了 await 错误。
当我尝试构建包含 FirstViewModel 的第三个“核心”Windows 可移植类库 (PCL) 时,出现以下错误:
解决方案中有四个项目:
一个 Windows 可移植类库 (PCL),其中有一个接口,该接口引用 BCL 提供的“任务”对象。
一个面向 OS 7.1 的 Windows Phone 类库,它实现了上述接口并使用 BCL 中的“任务”。
另一个提供应用程序“核心”功能的 Windows 可移植类库 (PCL),包括 ViewModel。
尝试引用和使用上述 DLL 的 Windows Phone 7.1/“7.5”应用程序。
包含接口和接口实现的前两个项目编译没有任何错误。但是第 3 个“核心”PCL 无法构建并出现上面显示的错误。
如果您想要更多详细信息:
我尝试了这个 App.config “修复”,如“已知 BCL 问题”中所述:http: //blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx。但是当我添加时没有解决错误App.config 只是“核心”项目,也不是当我尝试将相同的 App.config 添加到每个项目时。可能是我没有在元素中使用正确的版本,或者我只是错误地执行了 App.config 的内容。
解决方案中设置为以 PCL 为目标的每个项目在 Visual Studio 中都设置为“Profile104”。
这些 DLL 位于:
此 PCL 配置文件在 Visual Studio 项目属性中显示为针对以下平台:适用于 Windows 应用商店应用的 .NET、.NET 4.5、Silverlight 4+ 和 Windows 7.5+
解决方案中的每个项目还通过 NuGet 引用了 Microsoft.Bcl“Microsoft BCL Portability Pack”。
所有四个项目都使用 MvvmCross (Mvx)。
此示例中的所有项目都未尝试针对与 Xamarin Droid/iOS 堆栈相关的任何内容。它是所有 Windows 并且仍然在 await 关键字上失败。
带有接口的 PCL 和 Windows Phone 类库都使用 Mvx CrossCore NuGet 包,并设置为作为“Mvx 插件”使用。
“核心”PCL 使用完整的 MvvmCross NuGet 包并包含发生等待错误的 FirstViewModel。
Windows Phone App 项目也引用了完整的 MvvmCross,其中包含 Windows Phone 特定的 Mvx 文件。
如前所述,请参阅 GitHub 上的失败示例代码。
.net - 正在迭代队列保证排队?
这保证总是打印123
吗?
编辑:
我完全同意以任何其他顺序枚举的队列显然是不正确的。这就是我问这个问题的原因。但是,抽象数据类型queue
仅对其enqueue
和dequeue
操作做出保证。
我正在寻找一个参考文档的答案,以保证.NET BCL 中的这种排序。
.net - 使用 Clickonce 部署 Microsoft.Bcl.Async
我有一个因以下错误而崩溃的 VB.NET 应用程序:
System.IO.FileNotFoundException: Could not load file or assembly 'System.Threading.Tasks, Version=2.5.19.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
File name: 'System.Threading.Tasks, Version=2.5.19.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
我正在尝试使用 Microsoft.Bcl.Async 库。我已经通过 Nuget 在实际使用 Async/Await 调用的项目和引用它的项目上安装了它。一切都在我的计算机上完美运行,但是当我在另一台计算机上发布和测试时,当我尝试使用它使用 Async/Await 的部分时,我的程序崩溃了。
System.Threading.Tasks 在 Copy Local 设置为 true 的两个项目中都被引用。Microsoft.Threading.Tasks 在 Copy Local 设置为 true 的两个项目中都被引用。我已经看到有关此的另一个线程,它已安装在相关项目中。这些是我的 app.config 文件中包含的行:
设置这个我错过了什么?如果您需要更多信息,请告诉我。谢谢!
.net-4.0 - 带有 Microsoft.Bcl.Async 的 .NET 4.0 应用程序无法在 .NET 4.5 构建服务器上构建
我有一个 .NET 4.0 应用程序,它使用Microsoft.Bcl.Async来支持异步/等待,在 Windows 8 机器上的 Visual Studio 2012 下开发。它在我的机器上运行良好,在其他环境(XP/Vista/7)中运行良好。
我的构建服务器设置是 Windows Server 2008 R2、.NET 4.5 和 TeamCity。
我的构建配置无法构建我的解决方案,出现以下错误:
构建配置设置为 Visual Studio 2012。我检查了代理要求,它包括对“DotNetFramework4.5_x86”的依赖。因此它必须使用 .net 4.5 msbuild,如此处所述。
我已经删除了这些包(Microsoft.Bcl.Async、Microsoft.Bcl、Microsoft.Bcl.Build)并再次添加了它们。没有不同。
我的选择已经不多了。有任何想法吗?
编辑
正如我所说,我刚刚设置了 TeamCity,我的构建配置非常简单。首先它从 svn 中检查出分支。
它有一个运行器类型为“Visual Studio (sln)”的构建步骤,Visual Studio 版本为 2012,“目标”字段为“清理,构建”,配置为“发布”。
此外,它使用“AssemblyInfo patcher”来更新版本号。
更新
我遵循了 Jon Skeet 的建议并将跑步者类型更改为 MSBuild。运行器类型:MSBuild MSBuild 版本:Microsoft .NET Framework 4.5 MSBuild ToolsVersion:无运行平台:x86 目标:Clean, Build 命令行参数:/P:Configuration=Release
它仍然给我同样的错误。
我已将“MSBuild ToolsVersion”更改为“4.0”(尽管我认为没有任何必要,因为该解决方案是使用 Visual Studio 2012 创建的)。同样的错误。
我已将“运行平台”更改为“x64”。同样的错误。
更新
我的服务器机器没有 .NET 4.0(和 4.0.3)的参考程序集。看了这个帖子,我觉得可能是这个原因。考虑到这一点,我已将参考程序集从我的开发人员机器复制到服务器。然后我再次尝试构建解决方案。同样的错误。我当时真的以为我会成功...
更新
我已经尝试重新启动服务器,以查看是否有任何更新挂在影响构建的 .NET4.5 安装中。同样的错误。
更新
我已经在服务器中安装了适用于 Windows 7 和 .NET 4 的 Windows SDK。它终于成功构建了!但是,我真的认为只有在 Marc Gravell 的帖子和 Hans 的回答之后复制参考程序集才能修复构建。然后我搜索了“...\Reference Assemblies\”文件夹以查看 sdk 安装是否添加了其他任何内容。然后我意识到我的错误:我已将参考程序集复制到服务器的文件夹“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework”,而不是将它们复制到“C:\Program Files (x86)\Reference程序集\Microsoft\Framework.NETFramework"。因此构建找不到程序集。
c# - 对于带有索引的嵌套 Select,ImmutableArray<> 的行为与 Array<> 不同
我遇到了一个似乎很奇怪的错误ImmutableArray<>
(使用 BCL 不可变集合 v1.0.12.0,运行时 .NET 4.5):
我在同一个命名空间下的同一个源文件中有以下两个完全相同的结构:
以下将引发异常:
如果我将 elements1 投影到ToArray()
第一行而不是ToImmutableArray()
,则一切正常。
这两个结构之间的唯一区别是WeightedComponent
之前被代码广泛使用,而之前WeightedComponent2
从未使用过(这就是为什么重现错误可能不明显的原因)。
在同一个表达式中迭代elements1
两次似乎与该问题有关,好像我删除它Select
工作正常,但elements2
. 它似乎真的与背后的代码ImmutableArray<>
考虑这两种结构的方式有关(也许有缓存机制?)
你知道是什么原因造成的吗?
c# - .NET 4.0 中的 CallerMemberName 不起作用
我正在尝试CallerMemberName
通过 BCL 可移植包在 .NET 4.0 中使用属性。它总是返回一个空字符串而不是成员名称。我究竟做错了什么?