小编Ste*_*idi的帖子

是否有.NET函数可以让我比较两个运算符的优先级?

.NET Framework中是否有一种类型可以比较两个运算符并确定其优先级是否低于另一个运算符?目前,我已经IComparer<ExpressionType>为我感兴趣的运营商实现了一种功能,并使用C#语言的运营商类别图表.

实施是微不足道的,而对于编译器/解释实施者一般使用,导致我认为一般的效用函数存在.或者,如果存在库函数以获得给定运算符的序数,则实现这样的比较器也是微不足道的.

.net expression-trees operator-precedence

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

如何使用JwtSecurityTokenHandler和JWKS端点验证JWT?

我正在使用IdentityServer4来保护多个服务的原型,但需要注意的是,这些服务可能无法迁移(在可预见的未来)以使用ASP.NET Core的OWIN中间件习惯用法.因此,我不能利用许多中间件助手来自动验证JWT,只需提供IdentityServer的着名JWKS端点等等.

如果我可以重建这种行为会很好,我想尽可能利用微软的JwtSecurityTokenHandler实现.但是,我无法弄清楚如何利用IdentityServer的发现端点提供的类型JsonWebKeySetJsonWebKey类型来提取密钥并执行验证.

JwtSecurityTokenHandler用于TokenValidationParameters验证JWT,这些参数需要一个或多个SecurityKey对象的实例来执行验证.

ClaimsPrincipal ValidateJwt(string token, IdentityModel.Client.DiscoveryResponse discovery)
{
    JwtSecurityToken jwt = new JwtSecurityToken(token);

    TokenValidationParameters validationParameters = new TokenValidationParameters
    {
        ValidateAudience = true,
        ValidateIssuer = true,
        RequireSignedTokens = true,
        ValidIssuer = "expected-issuer",
        ValidAudience = "expected-audience",
        IssuerSigningKeys = discovery.KeySet.Keys /* not quite */
    };

    JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
    SecurityToken validatedToken;
    return handler.ValidateToken(jwt, validationParameters, out validatedToken);
}
Run Code Online (Sandbox Code Playgroud)

如何从执行必要的转换JsonWebKeySet,以IEnumerable<SecurityKey>使可能发生的验证?是否有其他方法(除了OWIN中间件)也可以使用DiscoveryResponse上面的数据?

(遗憾的是,文档System.IdentityModel.Tokens.Jwt不是最新的.)

asp.net oauth-2.0 jwt openid-connect identityserver4

8
推荐指数
2
解决办法
4079
查看次数

管理开源项目的强名称密钥对的推荐方法是什么?

我管理一个开源项目,并希望签署项目二进制包中发布的二进制文件.我使用Visual Studio csprojsln文件来管理和构建我的项目,并将这些文件作为项目源包的一部分进行分发.

如何签署生成的二进制文件而不必分发snk密钥对文件?如果我使用Visual Studio对程序集进行签名,则每个项目文件现在都需要密钥对的副本才能构建.即使密码保护,我也不习惯分发密钥对.

编辑:

另一个需要注意的是,项目中的某些程序集InternalsVisibleToAttribute通过项目引用授予朋友访问权限,并构建这些朋友.因此,在引用签名的程序集时,此类程序集需要使用强名称.但是,如果密钥对未分发,那么最终用户如何构建源并维护项目关系?如果使用临时密钥对文件,签名程序集的公钥标记是否会更改,从而破坏InternalsVisibleToAttribute引用?

c# strongname open-source assembly-signing visual-studio

7
推荐指数
3
解决办法
2698
查看次数

.NET中的实体框架?

我们是需要单独安装实体框架还是配备.net 3.5

.net installation entity-framework

7
推荐指数
2
解决办法
168
查看次数

可以利用std :: basic_string来实现具有长度限制的字符串吗?

我正在使用一个低级API,它接受一个char*和数字值来分别表示一个字符串及其长度.我的代码使用std::basic_string适当的翻译并调用这些方法.不幸的是,这些方法中的许多都接受不同大小的字符串长度(即max(unsigned char),max(short)等等),而且我很难编写代码以确保我的字符串实例不超过规定的最大长度.低级API.

默认情况下,std::basic_string实例的最大长度受最大值size_t(max(unsigned int)或max(__int64))的约束.有没有办法操纵实现的traits和allocator实现,std::basic_string以便我可以指定自己的类型来代替size_t?通过这样做,我希望利用实现中的任何现有边界检查std::basic_string,因此在执行转换时我不必这样做.

我的初步调查表明,如果不编写我自己的字符串类,这是不可能的,但我希望我忽略了一些东西:)

c++ string templates stl stdstring

6
推荐指数
1
解决办法
2508
查看次数

非严格的多接口类型参数约束?

对不起,如果这是一个骗局,但我似乎无法得到正确的关键字组合来过滤各种类型约束和泛型问题(因为有很多).

我有两个接口 - 让我们称它们为IOnlineIOffline.

它们密切相关,因为它们描述了几乎相同的契约,但它们之间的关键差异之一是将使用具体实现的上下文.这不完全是我的情况,但它很好地说明了问题.

然后,我有一些方法可以对付这些接口的具体实现者.有时这些方法只想处理一种类型而不是另一种类型.

很简单:

public void DoStuff<T>(string foo) where T : IOnline {}
Run Code Online (Sandbox Code Playgroud)

踢球者正在实现可以在EITHER类型上操作的方法的代码.我认为这是正确的,但在阅读编译错误时,我期望约束将被解释为"允许任何类型T在这里一般使用,如果它们实现IOnline OR IOffline",实际上被解释为"允许任何类型"如果它们同时实现,则在这里使用T".

public void DoStuff<T>(string foo) where T : IOnline, IOffline {}
Run Code Online (Sandbox Code Playgroud)

尝试实现具有相同名称但不同约束的两个单独方法失败,因为存在明显的歧义问题 - 我们没有超载,因为参数列表是相同的(因为期望的行为是相同的).

可以为两个不同的方法使用两个不同的名称,每个方法都有适当的约束,但这看起来很糟糕,并使得下游的其他事情成为屁股的痛苦......可行但不理想.

我觉得必须有一些我在这里缺少的东西...我觉得在通用的土地上非常舒服,但这是我第一次完成我所追求的目标,我觉得我只是在旋转我的车轮atm.

c# generics type-constraints

6
推荐指数
1
解决办法
2368
查看次数

检测BinaryExpression中的括号

我正在构建一个表达式分析器,我想从中生成数据库查询代码,我已经走得很远,但是我很难准确地解析BinaryExpressions.将它们分解为Left和Right非常容易,但我需要检测括号并相应地生成我的代码,我看不到如何执行此操作.

一个例子[请忽略有缺陷的逻辑:)]:

a => a.Line2 != "1" && (a.Line2 == "a" || a.Line2 != "b") && !a.Line1.EndsWith("a")
Run Code Online (Sandbox Code Playgroud)

我需要在中间检测'set'并保留它们的分组但是在解析期间我看不到表达式与正常BinaryExpression的任何差异(我不想检查括号的字符串表示)

任何帮助,将不胜感激.

(我应该提一下,我正在使用C#)

- 编辑 - 我没有提到我使用标准的.Net Expression类来构建表达式(System.Linq.Expressions命名空间)

--Edit2--好的我没有将文本解析为代码,我正在将代码解析为文本.所以我的Parser类有一个这样的方法:

void FilterWith<T>(Expression<Func<T, bool>> filterExpression);
Run Code Online (Sandbox Code Playgroud)

它允许你编写这样的代码:

FilterWith<Customer>(c => c.Name =="asd" && c.Surname == "qwe");
Run Code Online (Sandbox Code Playgroud)

使用标准.Net类很容易解析,我的挑战是解析这个表达式:

FilterWith<Customer>(c => c.Name == "asd" && (c.Surname == "qwe" && c.Status == 1) && !c.Disabled)
Run Code Online (Sandbox Code Playgroud)

我的挑战是将括号内的表达式保持为单个集合..Net类正确地将括号部分与其他部分分开,但由于括号而没有表明它是一个集合.

.net c# expression-trees parentheses

6
推荐指数
1
解决办法
2060
查看次数

为什么编译器在以下示例中没有选择我的函数模板重载?

给出以下函数模板:

#include <vector>
#include <utility>

struct Base { };
struct Derived : Base { };

// #1
template <typename T1, typename T2>
void f(const T1& a, const T2& b)
{
};

// #2
template <typename T1, typename T2>
void f(const std::vector<std::pair<T1, T2> >& v, Base* p)
{
};
Run Code Online (Sandbox Code Playgroud)

为什么以下代码总是调用#1而不是#2重载?

int main()
{
    std::vector<std::pair<int, int> > v;
    Derived derived;

    f(100, 200);  // clearly calls overload #1
    f(v, &derived);         // always calls overload #1

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

鉴于第二个参数f是派生类型Base,我希望编译器选择重载#2,因为它比重载#1中的泛型类型更好. …

c++ templates overloading function-templates overload-resolution

5
推荐指数
2
解决办法
329
查看次数

使用C#从flv文件中提取信息

是否有代码帮助从使用C#的flv文件中提取头信息和目标帧?

.net c# flv

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

Powershell 2.0在帮助页面中呈现脚本的默认参数值需要什么?

我有以下简单的脚本,它接受文本作为输入并将其写入主机.

<#
.SYNOPSIS
    Writes the input string to the host.
.PARAMETER Text
    The text to write to the host.
#>

param([string]$text = "hello world!")
Write-Host $text
Run Code Online (Sandbox Code Playgroud)

要呈现此脚本的帮助,我在Powershell会话中执行以下命令,其中write-text.ps1是此脚本的名称.

get-help .\write-text.ps1 -full
Run Code Online (Sandbox Code Playgroud)

在下面的输出中,我希望看到帮助中列出的脚本参数的默认值 - 但我没有:

PARAMETERS
    -text <String>
        The text to write to the host.

        Required?                    false
        Position?                    1
        Default value
        Accept pipeline input?       false
        Accept wildcard characters?
Run Code Online (Sandbox Code Playgroud)

我需要在此脚本中添加或更改帮助引擎以呈现默认参数值?

powershell default-value powershell-2.0

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