小编Ric*_*ban的帖子

为什么我不能索引到ExpandoObject?

今天在研究C#动态时,有些东西让我感到惊讶(我从未使用过它们,但最近我一直在试验Nancy web框架).我发现我不能这样做:

dynamic expando = new ExpandoObject();

expando.name = "John";

Console.WriteLine(expando["name"]);
Run Code Online (Sandbox Code Playgroud)

最后一行抛出异常:

无法将[]索引应用于"System.Dynamic.ExpandoObject"类型的表达式

我理解错误信息,但我不明白为什么会这样.我查看了ExpandoObject的文档,它显式实现IDictionary<,>,因此有一个this.[index]方法(MSDN).为什么我不能打电话给它?

当然,没有什么可以阻止我ExpandoObject手动向下翻译到字典然后索引到它,但这种方式无视这一点; 它也没有解释Expando如何能够隐藏其中一个接口的方法.

这里发生了什么?

c# dynamic expandoobject

34
推荐指数
1
解决办法
9077
查看次数

(红隼)K-combinator:为什么它有用?

我最近一直在接受F#(我的背景是C#)并且正在阅读http://fsharpforfunandprofit.com网站,我发现这非常有帮助.

我必须http://fsharpforfunandprofit.com/posts/defining-functions/这是关于组合器的部分.除了红隼之外,我全都了解它们(虽然Y组合器或Sage鸟用我的脑子拧!).Scott Wlaschin将定义(在F#中)定义为:

let K x y = x
Run Code Online (Sandbox Code Playgroud)

对于我的生活,我无法理解任何有用的情况.起初我认为它可能被用作链式运算符,因此您可以将值传递给函数,然后返回原始值.我以前自己写过这样一个算子,但你可以看到它不一样:

let (>|) x f = f x; x
Run Code Online (Sandbox Code Playgroud)

如果我们部分应用K组合子(值为5),那么我们返回一个忽略其参数的函数,而是返回5.再次,没有用.

(K 5) = fun y -> 5
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一个简单的例子,说明这可能会被使用吗?

f# functional-programming sample combinators k-combinator

15
推荐指数
1
解决办法
1622
查看次数

如何从 Azure 容器应用服务使用 Azure ACR 进行身份验证

我正在尝试设置我的应用程序容器服务,以便它可以使用托管身份从我们的 ACR 中提取 docker 映像,而不是将用户名和密码存储在应用程序设置中(除了我们想要编写这些部署的脚本之外,如果应用程序服务需要用户名和密码,那么我们必须将它们存储在源代码管理中)。

令人难以置信的是,我找不到有关此场景的任何文档。我发现的最接近的是使用托管身份从虚拟机中提取 ACR 映像[ https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication-management-identity],我不能将其用作指南,因为最后一步(我唯一缺少的一点)是通过SSH 进入虚拟机并az acr login --name myContainerRegistry在命令行中运行。

我必须去的地方:

  • 我已经创建了 ACR 和容器应用服务
  • 我已将该角色授予ACR Pull应用Reader程序服务的系统分配身份
  • 尝试拉取容器映像时,应用程序服务访问被拒绝

我不知道下一步该做什么;就像我说的,我找不到关于这种情况的任何指南。

azure azure-container-registry azure-managed-identity

10
推荐指数
2
解决办法
9611
查看次数

如何在远程运行命令时更改Powershell CLR版本?

我在尝试在远程服务器上运行我们的一些脚本时遇到了问题.

我们需要所有Powershell会话来加载CLR的v4,因为我们正在使用我们的脚本加载我们自己的自定义二进制文件.

我们已经这样做了一段时间(我们使用类似于这里的修改过的powershell.exe.config这样做:如何使用.NET 4运行时运行PowerShell?),当你进入'Server1'的RDP时一切都很好并开启Powershell会议.变量$ PSVersionTable告诉我们CLR v4已加载.

既然我们正试图通过远程运行这些命令来简化操作,那么我们遇到了问题:当你在同一台服务器上输入一个远程Powershell会话时,$ PSVersionTable只显示v2 ......

所以问题是,如果你在Server1上打开一个本地Powershell会话,它会加载v4,但如果你从Server2远程到Server1它只加载v2.

有谁知道如何告诉Powershell使用CLR v4进行远程会话?任何帮助将非常感激!

clr powershell remoting

9
推荐指数
1
解决办法
6401
查看次数

MSBuild 2015发布:找不到有效的AspnetMergePath

我在TeamCity上构建了一个Web项目,可以为以后的部署打包,目前正在使用MSBuild 2013.当我最近推送一些代码时,我遇到了构建错误(因为我使用了一些C#6功能)所以我去改变了使用MSBuild 2015的构建配置,并收到此错误:

[Error] C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets(132, 5): Can't find the valid AspnetMergePath

之前在其他问题中已经提到过此错误(例如:VS 2012发布:找不到有效的AspnetMergePath),但遗憾的是,这些问题中提到的修复都没有对我有用.

我已经尝试或已经是这样的事情:

  • 来自本地计算机的Web和WebApplication目录(位于C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v14.0)已被复制到构建服务器(它们一直在那里)
  • 添加 <TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\</TargetFrameworkSDKToolsDirectory>Microsoft.Web.Publishing.AspNetCompileMerge.targets文件
  • 添加/p:AspnetMergePath="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\"到MSBuild命令

我对这一点感到有点失落:我唯一没有尝试过的就是在构建服务器上安装Visual Studio,但是如果可以的话,我真的很想避免这种情况(因为我认为这很荒谬)您应该在CI服务器上安装完整的IDE!).

更多信息:

  • 如果你将构建切换回MSBuild 2013,一切都会继续正常工作(尽管很明显,我们不想在过去被卡住)
  • 我们有许多其他纯粹的编译版本,它们针对MSBuild 2015运行而没有任何错误

c# msbuild teamcity visual-studio-2015

9
推荐指数
1
解决办法
6231
查看次数

我可以信任 ASP.NET Core 中 IFormFile 的 .Length 属性吗?

我们有一个API端点,允许用户上传图像;它的参数之一是 IFormFileCollection。

我们想验证文件大小以确保端点没有被滥用,因此我正在检查Length每个属性IFormFile,但我不知道我是否可以信任该属性,即这是否来自请求?它是否被视为“输入” Content-Length

file-upload asp.net-core

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

Powershell在switch语句中将空字符串视为等效于null,而不是if语句

请告诉我,我的代码中有一个微妙的错误,这实际上并不是Powershell的运作方式.

$in = ""

if ($in -ne $null)
{
    switch ($in)
    {
        $null { echo "This is impossible" }
        default { echo "out here!"  }
    }
}
Run Code Online (Sandbox Code Playgroud)

所有善良,诚实的逻辑说,这个剧本永远不应该打印出" 这是不可能的 ".但它确实如果$ in是一个空字符串.因此,在Powershell中,似乎空字符串和null字符串switch语句中if被认为是等效的,但在语句中则不是.这是如此混乱,是许多人回避使用Powershell的主要原因之一.

任何人都可以告诉我为什么会这样吗?有谁知道幕后实际做了什么开关?它肯定不是直接比较.

powershell null

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

Selenium:By.Id("myelement")和By.Css("#myelement")之间是否存在性能差异?

我正在围绕.NET中的IWebDriver为我们的测试人员编写一些帮助方法,并开始想知道当你可以使用CSS选择器来获取ID的元素时,是否有任何方法可以通过ID获取元素.

我认为,最终,对CSS"#myelement"的请求将被优化到document.getElementById("myelement").

有性能差异吗?当我们可以使用CSS选择器来完成同样的事情时,我们是否应该使用By.Id和By.Name?

.net c# selenium google-chrome specflow

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

在可能的情况下自动解决 git 冲突

我们有一个包含 50 多个项目的 .NET 解决方案文件,我们经常遇到这样的情况:两个人将进行相对较小的更改(例如更新 Nuget 包或重命名文件),这会影响所有 50项目文件。

这意味着任何时候合并这些分支时,所有 50 个文件都会发生冲突 - 但是如果您在任何合并工具中打开它们,它将能够自动解决它们。这意味着我在合并中没有实际工作要做,但我必须单击每个文件,等待它在 Beyond Compare 中打开,然后单击保存,然后单击关闭。单击下一个文件,单击保存,单击关闭...重复 55 次。

我的问题是:有什么方法可以让 Git 在遇到冲突文件时尝试使用合并工具自动解决它们?

更新:希望这会增加一些清晰度:我必须一个一个解决每个冲突,但是由于我的合并工具可以自动解决每个冲突,是否有某种批处理操作或合并命令的选项,我可以称呼?

git merge merge-conflict-resolution

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

SourceGenerator:属性 ConstructorArguments 为空

我正在编写一个源生成器,但正在努力获取传递给属性构造函数的参数值。

我将以下内容注入到编译中:

namespace Richiban.Cmdr
{
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
    public class CmdrMethod : System.Attribute
    {
        private readonly string _alias;

        public CmdrMethod(string alias)
        {
            _alias = alias;
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的示例应用程序中我有以下内容:

public static class InnerContainerClass
{
    [CmdrMethod("test")]
    public static void AnotherMethod(Data data)
    {
        Console.WriteLine($"In {nameof(AnotherMethod)}, {new { data }}");
    }
}

Run Code Online (Sandbox Code Playgroud)

编译时没有错误或警告,并且我成功地找到了用我的CmdrMethod属性修饰的所有方法,但我无法获取传递给属性的值,因为由于某种原因,该ConstructorArguments属性的属性为空:

private static ImmutableArray<string> GetAttributeArguments(
            IMethodSymbol methodSymbol,
            string attributeName)
{
    var attr = methodSymbol
        .GetAttributes()
        .Single(a => a.AttributeClass?.Name == attributeName);

    var arguments = attr.ConstructorArguments;
    
    if (methodSymbol.Name …
Run Code Online (Sandbox Code Playgroud)

c# roslyn sourcegenerators

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