Tag: C#的

新的netstandardapp和netcoreapp TFM之间有什么区别?

我注意到NuGet最近增加了对与.NET Core相关的几个新的TFM的支持,包括: netstandard (1.0-1.5) netstandardapp (1.5) netcoreapp (1.0) 据我所知, netstandard是一个可移植configuration文件的.NET Core等价物; 它允许您使用单个名字对象来定位多个平台,而不是明确地说明您支持的每个平台,例如portable-net45+netcore45+wp81 。 同时,根据这个文档, netstandardapp是.NET Core中的一个控制台应用程序; 它表示任何.NET Core运行时(如CoreCLR,CoreRT)。 那么, netcoreapp应该是什么呢? 我在这里发现了跟踪问题,其中包括底部的评论,有点解释了什么区别,但我不明白什么区别 NETStandard.Library +应用程序主机 和 .NET核心库安装 是。 有人可以向我解释吗?

您在* nix服务器上为ASP.NET Core制作哪个Web服务器?

随着ASP.NET Core的发布,我想知道什么是Linux和Mac环境的最佳托pipeselect。 有没有积极开发生产级networking服务器? 我所知道的唯一一个与框架一起出货的Kestrel。 从文档看来,Kestrel与IIS相比缺less了一些function 这个 Stackoverflow的答案表明,.NET核心应用程序可以与任何HTTP服务器。 这是否意味着它将与Apache一起工作? 如果是的话,它会缺less任何function吗? 我的印象是,它只适用于基于OWIN的服务器。 我错过了什么吗?

当OwinStartup时如何使用DI容器

这是一个Web API 2项目。 当我使用Ninject实现DI时,我收到一条错误消息 尝试创buildtypes为“TokenController”的控制器时发生错误。 确保控制器有一个无参数的公共构造函数。 [assembly: OwinStartup(typeof(Web.Startup))] namespace Web { public partial class Startup { public void Configuration(IAppBuilder app) { ConfigureAuth(app); ConfigureWebApi(app); } } } public class TokenController : ApiController { private IUserService _userService; public TokenController(IUserService userService) { this._userService = userService; } [Route("api/Token")] public HttpResponseMessage PostToken(UserViewModel model) { if (_userService.ValidateUser(model.Account, model.Password)) { ClaimsIdentity identity […]

访问器方法(getter和setter)在C ++中的约定

关于C ++的访问器方法的几个问题已经被问到,但是没有一个能够满足我对这个问题的好奇心。 我尽可能地避免使用访问器,因为像Stroustrup和其他着名程序员一样,我认为一个类中有许多是OO的坏迹象。 在C ++中,我可以在大多数情况下为类添加更多的责任,或者使用friend关键字来避免它们。 但在某些情况下,您确实需要访问特定的class级成员。 有几种可能性: 1.根本不使用访问器 我们可以公开各自的成员variables。 这在Java中是不可行的,但对于C ++社区来说似乎没有问题。 然而,我有点担心的情况是明确的复制或只读(const)引用的对象应该被返回,这是夸大? 2.使用Java风格的get / set方法 我不确定它是否来自Java,但我的意思是: int getAmount(); // Returns the amount void setAmount(int amount); // Sets the amount 3.使用客观的C风格get / set方法 这有点奇怪,但显然日益普遍: int amount(); // Returns the amount void amount(int amount); // Sets the amount 为了这个工作,你将不得不为你的成员variablesfind一个不同的名字。 有些人附加一个下划线,其他人则加上“m_”。 我也不喜欢。 你使用哪种风格,为什么?

someString.IndexOf(someString)在.NET 4下返回1而不是0

我们最近把我们所有的项目从.NET 3.5升级到了.NET 4.我遇到了string.IndexOf()方面相当奇怪的问题。 我的代码显然做了一些稍微不同的事情,但在调查问题的过程中,我发现调用IndexOf()的string本身返回1而不是0.换句话说: string text = "\xAD\x2D"; // problem happens with "-dely N.China", too; int index = text.IndexOf(text); // see update note below. 给了我一个索引1,而不是0.几个事情要注意这个问题: 这些问题似乎与这些连字符有关(第一个字符是Unicode软连字符,第二个是常规连字符)。 我有双重检查,这不会在.NET 3.5中发生,但在.NET 4中。 更改IndexOf()进行序号比较可以解决问题,所以出于某种原因,第一个字符被默认的IndexOf忽略。 有谁知道为什么发生这种情况? 编辑 对不起,伙计们在原帖上写了一些东西,并在那里得到了两次隐藏的冲刺。 我已经更新了string,这应该返回索引1而不是2,只要您将其粘贴到正确的编辑器。 更新: 将原始问题string更改为每个实际字符清晰可见(使用转义)。 这简化了一些问题。

什么时候应该只使用“int”而不是更多符号或特定于大小的types?

我有一个用C 语言实现的编程语言的虚拟机 。它支持在32位和64位体系结构以及C和C ++下编译。 我试图尽可能多的启用警告,使其编译干净。 当我打开CLANG_WARN_IMPLICIT_SIGN_CONVERSION ,我得到了CLANG_WARN_IMPLICIT_SIGN_CONVERSION的新警告。 我想有一个很好的策略,何时使用int与明确无符号types,和/或明确大小的。 到目前为止,我很难决定这个策略应该是什么。 把它们混合在一起(大部分使用int来表示局部variables和参数,而对结构中的字段使用较窄的types),这确实是真的,会导致大量的隐式转换问题。 我喜欢使用结构字段更具体的大小types,因为我喜欢明确控制堆中的对象的内存使用的想法。 而且,对于散列表,我依靠散列时的无符号溢出,所以如果散列表的大小存储为uint32_t ,那就好了。 但是,如果我尝试在所有地方使用更具体的types,我发现自己到处都是曲折的迷宫。 其他C项目做什么?

在PC之间传输所有的ReSharper设置

我想知道是否有一种方法可以将所有我的设置从ReSharper(包括ReSharper设置的StyleCop和我为ReSharper设置的键盘绑定)从一台PC复制到另一台?

const void是什么意思?

显然,可以声明一个返回const void的函数: const void foo() { } g ++似乎认为const重要的,因为下面的代码不能编译: #include <type_traits> static_assert(std::is_same<void(), const void()>::value, "const matters"); 那么const void是否有什么实际意义呢?

生成密码安全的身份validation令牌

背景: 这实际上是一个普遍的最佳实践问题,但是关于具体情况的一些背景可能会有帮助: 我们正在为iPhone开发一个“连接”应用程序。 它将通过REST服务与后端应用程序进行通信。 为了不必在每次启动应用程序时提示用户input用户名和密码,我们将公开一个“login”服务,在首次启动时validation用户名和密码,并返回一个可用于未来networking的身份validation令牌对真实数据的服务请求。 令牌可能会有一个到期时间,之后我们会要求他们用他们的用户名/密码重新进行validation。 问题: 生成这种用于身份validation的令牌的最佳做法是什么? 例如,我们可以… 散列(SHA-256等)一个随机string,并将其存储在给定用户的数据库中,并附带过期date。 在后续的请求上做一个简单的查询,以确保匹配。 使用密钥encryption用户标识和一些附加信息(时间戳等)。 解密后续请求令牌,以确保它是由我们发出的。 这感觉就像是一个解决的问题。

为什么模板参数replace的顺序很重要?

C ++ 11 14.8.2 – 模板参数推导 – [temp.deduct] 7replace发生在函数types和模板参数声明中使用的所有types和expression式中。 expression式不仅包含常量expression式,例如出现在数组边界中的常量expression式或非types模板参数,还包括sizeof , decltype和其他允许非常量expression式的上下文中的常规expression式(即非常量expression式)。 C ++ 14 14.8.2 – 模板参数推导 – [temp.deduct] 7replace发生在函数types和模板参数声明中使用的所有types和expression式中。 expression式不仅包含常量expression式,例如出现在数组边界中的常量expression式或非types模板参数,还包括sizeof , decltype和其他允许非常量expression式的上下文中的常规expression式(即非常量expression式)。 replace按照词汇顺序进行,并在遇到导致扣除失败的条件时停止 。 添加的句子在处理C ++ 14中的模板参数时明确指出了replace的顺序。 替代的顺序是最经常不被重视的。 我还没有find一个关于为什么这个问题的文件。 也许这是因为C ++ 1y还没有完全标准化,但我认为这样的改变一定是出于某种原因而被引入的。 问题是: 为什么和什么时候,模板论证replace的顺序很重要?