今天在研究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如何能够隐藏其中一个接口的方法.
这里发生了什么?
我最近一直在接受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)
任何人都可以给我一个简单的例子,说明这可能会被使用吗?
我正在尝试设置我的应用程序容器服务,以便它可以使用托管身份从我们的 ACR 中提取 docker 映像,而不是将用户名和密码存储在应用程序设置中(除了我们想要编写这些部署的脚本之外,如果应用程序服务需要用户名和密码,那么我们必须将它们存储在源代码管理中)。
令人难以置信的是,我找不到有关此场景的任何文档。我发现的最接近的是使用托管身份从虚拟机中提取 ACR 映像[ https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication-management-identity],我不能将其用作指南,因为最后一步(我唯一缺少的一点)是通过SSH 进入虚拟机并az acr login --name myContainerRegistry在命令行中运行。
我必须去的地方:
ACR Pull应用Reader程序服务的系统分配身份我不知道下一步该做什么;就像我说的,我找不到关于这种情况的任何指南。
我在尝试在远程服务器上运行我们的一些脚本时遇到了问题.
我们需要所有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进行远程会话?任何帮助将非常感激!
我在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),但遗憾的是,这些问题中提到的修复都没有对我有用.
我已经尝试或已经是这样的事情:
<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!).
更多信息:
我们有一个API端点,允许用户上传图像;它的参数之一是 IFormFileCollection。
我们想验证文件大小以确保端点没有被滥用,因此我正在检查Length每个属性IFormFile,但我不知道我是否可以信任该属性,即这是否来自请求?它是否被视为“输入” Content-Length?
请告诉我,我的代码中有一个微妙的错误,这实际上并不是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的主要原因之一.
任何人都可以告诉我为什么会这样吗?有谁知道幕后实际做了什么开关?它肯定不是直接比较.
我正在围绕.NET中的IWebDriver为我们的测试人员编写一些帮助方法,并开始想知道当你可以使用CSS选择器来获取ID的元素时,是否有任何方法可以通过ID获取元素.
我认为,最终,对CSS"#myelement"的请求将被优化到document.getElementById("myelement").
有性能差异吗?当我们可以使用CSS选择器来完成同样的事情时,我们是否应该使用By.Id和By.Name?
我们有一个包含 50 多个项目的 .NET 解决方案文件,我们经常遇到这样的情况:两个人将进行相对较小的更改(例如更新 Nuget 包或重命名文件),这会影响所有 50项目文件。
这意味着任何时候合并这些分支时,所有 50 个文件都会发生冲突 - 但是如果您在任何合并工具中打开它们,它将能够自动解决它们。这意味着我在合并中没有实际工作要做,但我必须单击每个文件,等待它在 Beyond Compare 中打开,然后单击保存,然后单击关闭。单击下一个文件,单击保存,单击关闭...重复 55 次。
我的问题是:有什么方法可以让 Git 在遇到冲突文件时尝试使用合并工具自动解决它们?
更新:希望这会增加一些清晰度:我必须一个一个解决每个冲突,但是由于我的合并工具可以自动解决每个冲突,是否有某种批处理操作或合并命令的选项,我可以称呼?
我正在编写一个源生成器,但正在努力获取传递给属性构造函数的参数值。
我将以下内容注入到编译中:
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# ×4
powershell ×2
.net ×1
asp.net-core ×1
azure ×1
clr ×1
combinators ×1
dynamic ×1
f# ×1
file-upload ×1
git ×1
k-combinator ×1
merge ×1
msbuild ×1
null ×1
remoting ×1
roslyn ×1
sample ×1
selenium ×1
specflow ×1
teamcity ×1