我终于研究了async和await关键字,我有点"得到",但我见过的所有例子都在.Net框架中调用异步方法,例如这个调用HttpClient.GetStringAsync().
我不太清楚的是这种方法会发生什么,以及我如何编写自己的"等待"方法.它是否像包装我想在Task中异步运行的代码并返回那样简单?
假设我有一个类"ClassA",它依赖于类"ClassB"(注入到ClassA的构造函数中).我想模拟ClassB,以便我可以单独测试ClassA.这两个类都是内部的.
如果我错了,请纠正我,但看起来Moq只能模拟一个类,如果它是公共的,它有一个公共无参数构造函数,并且要模拟的方法是public virtual.我真的不想让这些课程公开可见.我错过了Moq的东西,还是不适合我想做的事情?
我想我可以创建一个ClassB实现的接口(比如"IClassB"),将其注入ClassA,然后模拟接口.ClassB仍然可以是内部的(虽然我意识到接口方法必须是公共的).虽然这可行,但我对创建大量接口感到不安,其唯一目的是支持单元测试模拟.思考?
我已经建立了一个内部NuGet存储库(我们的一个服务器上的共享文件夹),并将其添加到我PC上的Visual Studio NuGet设置中的"可用源"列表中.我能够从这个存储库成功地将软件包安装到我的解决方案中.
但是在TFS服务器上,构建失败,因为它无法恢复此特定包(消息:"无法找到包'xxx'的版本'xxx'").该解决方案配置为"启用NuGet包还原",适用于通过安装的包nuget.org.它只是没有从我们的内部存储库恢复包.
存储库文件夹/共享的权限很好.我错过了什么?
我猜我必须在TFS服务器上配置Visual Studio的"可用源",但可能这些设置是用户特定的?构建服务作为NETWORK SERVICE运行,那么如何为该用户配置NuGet?
我正在开发一个新的客户端 - 服务器应用程序(.Net),到目前为止一直在使用WCF,它非常适合应用程序的请求 - 响应方法.但是我被要求用基于套接字的解决方案替换它,部分是为了支持非.Net客户端,以及未来的pub-sub/broadcast要求(我意识到WCF是有能力的,但是决定背后还有其他驱动因素).在编写我自己的异步套接字解决方案时惨遭失败,我现在正在关注ZeroMQ.
我的客户端应用程序有几个后台线程,定期从服务器请求数据.另外,某些UI动作(例如按钮点击)可以触发到服务器的消息.WCF使这很容易 - 代码简单地称为单独的WCF服务代理上的相关方法(实际上我使用Castle Windsor WCF工具,它给我异步调用功能,但这可能与我的问题无关).
我不太确定这种方法如何转化为ZeroMQ,特别是在管理套接字方面 - 我对ZeroMQ很新,还在阅读指南.我说得对,每个线程都需要一个单独的套接字(即两个b/g线程和UI)?套接字生存期怎么样 - 每次我想发送/接收时(创建效率低下)都创建一个,或者在线程启动时创建套接字并在线程的整个生命周期内重用它?
我有一个带有几个项目的VS2013解决方案(C#WPF应用程序和类库).每个项目的"平台目标"都设置为"任何CPU".我的印象是,最终的EXE将在64位PC上运行为64位应用程序,在32位PC上运行32位应用程序.它是否正确?我的开发PC是64位,但是当我运行应用程序(独立或通过VS调试)时,它在任务管理器中显示为"foo.exe*32".这里发生了什么?
我们有一个拥有32位机器的初级开发人员.他还能打开解决方案并在VS中运行吗?
此外,某些项目引用了第三方DLL.供应商提供32位和64位版本 - 项目应引用哪一个?如果我引用32位DLL将阻止应用程序作为64位应用程序运行?如果我引用64位版本,这会给32位开发人员带来问题吗?那么最终用户呢 - 我的安装程序是否需要检查操作系统版本并复制相应的DLL?
最后,通过NuGet引用的DLL怎么样?NuGet是否安装了32位或64位版本的DLL?如何处理32位或64位最终用户安装?
我们的组织使用包含我们组织的 StyleCop.Analyzers 设置的规则集文件。这存在于源代码控制中,我们组织中所有解决方案中的所有项目都引用此文件。如果我编辑规则集(通过项目属性 -> 代码分析选项卡),我会看到一条消息,提示我将规则集迁移到 editorconfig 文件。有人可以解释为什么我想要这样做,两者之间有什么区别?
我还注意到在 VS 工具->选项->文本编辑器->C#->代码样式中,有许多设置与许多 StyleCop.Analyzers 规则非常相似(例如,与使用“this ", vs StyleCop SA1101 "用这个前缀本地调用")。这里还有一个按钮可以根据这些设置创建 editorconfig 文件,那么这些设置如何与 StyleCop.Analyzer 设置共存,哪个优先?
此外,我们的 Azure DevOps 自动生成报告警告,其中任何代码“违反”了 StyleCop 规则。如果我们用 editorconfig 文件替换规则集,构建是否仍会执行此操作?
最后,有一个用于编辑 StyleCop.Analyzer 设置的 GUI(项目属性 -> 代码分析选项卡 ->“配置”按钮),而 editorconfig 文件似乎是使用 VS 文本编辑器编辑的。鉴于有数百条规则需要管理,您从哪里获得需要输入的完整规则列表?这会不会很乏味?
visual-studio editorconfig roslyn-code-analysis visual-studio-2019
我在玩 .Net 5 时遇到了一些问题,所以我希望有人能对事情有所了解。在大型企业 .Net Framework 解决方案上工作了很多年,.Net Core 似乎已经过去了,我没有接触过它,这可能解释了我的一些困惑......
单元测试参考?
我创建了一个包含 WPF 项目(“WPF 应用程序(.NET)”)和一个单元测试项目(“MSTest 测试项目(.Net Core)”)的解决方案。两者都在其属性页面中设置为“.NET 5”的目标框架。
当我从单元测试项目中引用 WPF 项目时,项目引用旁边会出现一个黄色三角形,并且在错误列表窗口中出现以下错误:
项目“MyTestWpf.csproj”针对“net5.0-windows”。它不能被以“.NETCoreApp,Version=v5.0”为目标的项目引用
我到底如何从 UT 项目中引用 WPF 项目?
类库引用 WPF 类型?
我还创建了一个 .Net 5 类库,它需要引用各种 WPF 类型(控件等),但我不确定如何配置必要的程序集/框架引用(在框架世界中,我只需添加程序集对 PresentationFramework、System.Xaml 等的引用)。不知何故,通过反复试验,我确实得到了这个工作,在项目文件中使用了这些行的组合:-
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<UseWPF>true</UseWPF>
Run Code Online (Sandbox Code Playgroud)
以及将目标框架从“net5.0”更改为“net5.0-windows”。
但是,我不确定实际上需要这些的哪种组合,或者我是否甚至应该手动编辑项目文件,如果不能通过 Visual Studio 完成,这感觉就像是倒退了一步!
我们所有的产品(WPF 应用程序)仍然使用 v4.6.1,这有点落后于时代。我目前正在使用 .NET 5,并将我们的一个类库(由许多这些产品使用)转换为 v5。我现在试图从我们的一个较小的产品中引用这个程序集,但它没有构建,有很多错误,例如:
依赖关系“System.Runtime,Version=5.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”。1> 无法解析此引用。无法找到程序集“System.Runtime,Version=5.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”
我的印象是 .NET 5 向后兼容,还是仅适用于 .NET Standard?(TBH 我一直在努力理解整个 .NET Standard/Core 的事情)。
我们还不想冒险将产品转换为 .NET 5 - 这是一项长期战略。在我们开始时将上述类库转换为准备好会很好,那么 .NET 框架解决方案有什么方法可以引用 .NET 5 程序集吗?我猜这是不可能的,唯一的选择是多目标?如果是这样,我该怎么做,它会回到 v4.6.1 吗?或者我们是否坚持将所有内容同时转换为 .NET 5 的“大爆炸”方法?
不确定它是否相关,但在\bin\debug\类库的文件夹中,我可以看到各种子文件夹,例如net5.0, net5.0-windows, net472, netstandard2.1- 仅net5.0-windows包含构建的 DLL。如果这是最低限度,我们也许可以使用 4.7.2,但我一开始不知道如何进行多目标。在“目标框架”下拉列表中,我只看到 .NET 5.0、.NET Core 3.0、.NET Core 3.1。
编辑 1
我按照下面卡米洛的建议替换为:
<TargetFrameworks>net5.0-windows;net461</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)
现在,代码不会构建。看一个例子,它似乎在抱怨它可以找到 .Net5 但不是 4.6.1 的类型“ItemsControl”:

我假设我需要以某种方式为 v4.6.1 添加 System.Windows.Controls,尽管这充其量是不直观的 - 因为在 .Net 框架应用程序中没有添加参考 -> 程序集窗口。我假设这现在必须通过 NuGet 完成,如果是这样,我需要哪个包?
在 SO 上问这个问题似乎很奇怪,但这就是 MS 希望我们这样做的......
我正在考虑设置本地 Azure DevOps 2019 服务器,但像往常一样,许可和成本不是很透明。
我们的开发团队很可能会获得 Visual Studio Pro 订阅,我相信它带有 DevOps 服务器许可证和 CAL。如果我们停止这些订阅会发生什么 - 这是否意味着我们不能再使用我们的本地 DevOps 服务器?
我不太清楚我们可能需要支付哪些“额外费用”(扩展、管道),我不想受到任何意外的打击。基本要求是:
我需要在我的应用程序中提供脚本功能,允许客户使用我们的对象模型扩展其功能.我希望提供一些带有intellisense的集成C#/ VB.Net编辑器,但在查看AvalonEdit和ScintillaNet等产品后,它们似乎没有提供真正的代码完成,只是一个API,您可以在其中提供自己的列表弹出自动完成列表中显示的项目.
因此我想知道罗斯琳是否提供了这样的功能?从我遇到的教程和示例中可以看出,Roslyn实际上只是一个编译器服务.
作为最后的手段,客户可以使用像VS Express这样的东西,但集成的编辑器显然更好一些.
(我也遇到了Visual Studio Tools for Applications,听起来很有希望;但是在线资源已有几年历史了,而且文档/教程不存在,所以我用这个来填空.)
c# ×4
.net ×2
.net-5 ×2
wpf ×2
.net-core ×1
async-await ×1
azure-devops ×1
editorconfig ×1
mocking ×1
moq ×1
nuget ×1
roslyn ×1
tfs ×1
tfs2012 ×1
tfsbuild ×1
unit-testing ×1
vb.net ×1
vsta ×1
zeromq ×1