小编Cod*_*Fox的帖子

C#'dynamic'无法访问另一个程序集中声明的匿名类型的属性

只要我在班级和班级ClassSameAssembly相同的班级中,下面的代码就能正常运行Program.但是当我将类移动ClassSameAssembly到一个单独的程序集时,RuntimeBinderException会抛出一个(见下文).有可能解决它吗?

using System;

namespace ConsoleApplication2
{
    public static class ClassSameAssembly
    {
        public static dynamic GetValues()
        {
            return new
            {
                Name = "Michael", Age = 20
            };
        }
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            var d = ClassSameAssembly.GetValues();
            Console.WriteLine("{0} is {1} years old", d.Name, d.Age);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'object'不包含'Name'的定义

at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
at ConsoleApplication2.Program.Main(String[] args) in C:\temp\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs:line …
Run Code Online (Sandbox Code Playgroud)

dynamic anonymous-types c#-4.0

85
推荐指数
3
解决办法
3万
查看次数

如何在反序列化过程中以编程方式选择构造函数?

我想以System.Security.Claims.Claim下列方式反序列化一个序列化的对象:

{
    "Issuer" : "LOCAL AUTHORITY",
    "OriginalIssuer" : "LOCAL AUTHORITY",
    "Type" : "http://my.org/ws/2015/01/identity/claims/mytype",
    "Value" : "myvalue",
    "ValueType" : "http://www.w3.org/2001/XMLSchema#string"
}
Run Code Online (Sandbox Code Playgroud)

我得到的是JsonSerializationException:

无法找到用于System.Security.Claims.Claim类型的构造函数.一个类应该有一个默认的构造函数,一个带参数的构造函数或一个用JsonConstructor属性标记的构造函数.

经过一些调查后,我终于理解了上面消息中一个的含义:JSON反序列化器找不到正确的构造函数 - 在Claim类型的情况下- 带有参数的多个构造函数(尽管存在一个构造函数,其参数完全匹配上述属性).

有没有办法告诉反序列化器选择哪个构造函数而不将该JsonConstructor属性添加到该mscorlib类型?

几年前, Daniel Halan用Json.NET补丁解决了这个问题.这些天有没有办法解决这个问题而不修改Json.NET?

c# json.net

31
推荐指数
3
解决办法
1万
查看次数

错误:安装 Rancher Desktop 时 wsl.exe 退出,代码为 4294967295

在我的虚拟机中安装最新稳定的 Rancher Desktop 时,我收到以下错误。

有人可以帮忙吗?

错误:

错误:wsl.exe 退出,代码为 4294967295

命令:

wsl --distribution rancher-desktop --exec mkdir -p /mnt/wsl/rancher-desktop/run/data
Run Code Online (Sandbox Code Playgroud)

日志:

2022-02-02T09:58:39.490Z: Running command wsl --distribution rancher-desktop --exec wslpath -a -u C:\Users\VIVEK~1.NUN\AppData\Local\Temp\rd-distro-gGd3SG\distro.tar...
2022-02-02T09:58:40.641Z: Running command wsl --distribution rancher-desktop --exec tar -cf /mnt/c/Users/VIVEK~1.NUN/AppData/Local/Temp/rd-distro-gGd3SG/distro.tar -C / /bin/busybox /bin/mount /bin/sh /lib /etc/wsl.conf /etc/passwd /etc/rancher /var/lib...
2022-02-02T09:58:42.628Z: Running command wsl --import rancher-desktop-data C:\Users\Vivek.Nuna\AppData\Local\rancher-desktop\distro-data C:\Users\VIVEK~1.NUN\AppData\Local\Temp\rd-distro-gGd3SG\distro.tar --version 2...
2022-02-02T09:58:44.025Z: Running command wsl --distribution rancher-desktop-data --exec /bin/busybox [ ! -d /etc/rancher ]...
2022-02-02T09:58:44.025Z: Running command wsl --distribution rancher-desktop-data --exec /bin/busybox …
Run Code Online (Sandbox Code Playgroud)

virtual-machine kubernetes rancher windows-subsystem-for-linux

24
推荐指数
3
解决办法
3万
查看次数

对于非管理员,HttpListenerException"访问被拒绝"

我编写了一个HttpListener用于侦听HTTP请求的C#应用​​程序 - 显然!我使用的命名空间前缀也是netsh为当前用户注册的(正如SO上的每个人所建议的那样).

问题是尽管使用netsh我的应用程序仍然会为非管理员用户抛出"访问被拒绝"例外.操作系统是Windows 7.

更新:netsh当我使用非管理员用户运行它时,好像我的应用程序没有执行命令.我的代码有问题吗?没有例外.

    AddAddress("http://localhost:8400/", Environment.UserDomainName, Environment.UserName);

    HttpListener _listener = new HttpListener();
    _listener.Prefixes.Add("http://localhost:8400/");
    _listener.Start();

    ...

    /** method stolen from an SO thread. sorry can't remember the author **/
    static void AddAddress(string address, string domain, string user)
    {
        string args = string.Format(@"http add urlacl url={0}", address) + " user=\"" + domain + "\\" + user + "\"";

        ProcessStartInfo psi = new ProcessStartInfo("netsh", args);
        psi.Verb = "runas";
        psi.CreateNoWindow = true;
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        psi.UseShellExecute …
Run Code Online (Sandbox Code Playgroud)

c# exception httplistener non-admin

17
推荐指数
1
解决办法
3万
查看次数

Visual Studio Debugger可以显示未引用/未转义的字符串吗?

Visual Studio中的托管调试器(我使用的是11.0)显示包含双引号和反斜杠的字符串值,如下所示:

"{\"Text\":\"C:\\\\Temp\"}"
Run Code Online (Sandbox Code Playgroud)

偶尔我想以简单的形式显示像上面那样的转义文本:

{"Text":"C:\\Temp"}
Run Code Online (Sandbox Code Playgroud)

我知道文本可视化器可以通过值旁边的放大镜访问,但是在调试一些文本操作例程时这很麻烦.

有没有办法在调试器中更改字符串值的显示?

c# debugging debuggervisualizer visual-studio visual-studio-2012

15
推荐指数
2
解决办法
3484
查看次数

从Prism应用程序引用正确的System.Windows.Interactivity dll

我正在构建一个WPF Prism应用程序.应用程序到了我希望能够将EventTriggers添加到控件的位置,以便我可以在底层视图模型上调用命令.但是,我似乎无法引用正确的DLL来使项目运行.目前,我引用Microsoft.Expression.Interactions,并System.Windows.Interactivity从该C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries目录.

当我运行模块时,我收到此错误:

无法加载文件或程序集'System.Windows.Interactivity,
PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.
该系统找不到指定的文件.

我检查了System.Windows.Interactivity反射器中的组件,可以看到它引用:

  • mscorlib程序
  • PresentationCore
  • PresentationFramework
  • 系统
  • System.Core程序
  • System.Xaml
  • WindowsBase

所有引用都指向4.0框架.我从.NET参考选项卡中引用了每个参考选项卡,确保每个都是4.0版本.所有这些引用都从C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0目录中加载.

我需要另外一个下载System.Windows.InteractivityMicrosoft.Expression.Interactions程序集在我的环境中工作吗?

wpf prism expression-blend

12
推荐指数
2
解决办法
2万
查看次数

来自守护进程的错误响应:hcsshim::CreateComputeSystem:无法启动虚拟机,因为未安装所需的功能

我已将 Docker Desktop 下载到 Windows 10 Pro 机器 (1809) 上。我正在尝试执行docker run hello-world命令,但收到此错误:

docker: Error response from daemon: hcsshim::CreateComputeSystem 0e3c581b7316f66fd396f6007f3260ded7d934c5e6d53c9fedba279b9c0044c2:
        The virtual machine could not be started because a required feature is not installed.
(extra info: {"SystemType":"Container","Name":"0e3c581b7316f66fd396f6007f3260ded7d934c5e6d53c9fedba279b9c0044c2","Owner":"docker","IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\\ProgramData\\Docker\\windowsfilter\\0e3c581b7316f66fd396f6007f3260ded7d934c5e6d53c9fedba279b9c0044c2","Layers":[{"ID":"08298683-92e6-5d81-8efa-07df462bc835","Path":"C:\\ProgramData\\Docker\\windowsfilter\\da67c59750c9d72f917f4169d58fff3285b27d01c30c159f437b8ec8bace3fd3"},{"ID":"8ffbf2ed-0796-5433-969d-24c7c60eed76","Path":"C:\\ProgramData\\Docker\\windowsfilter\\20785c70b0b36964948ecf0180bbe644306ed1f70686864f3cf476229f3ae054"},{"ID":"d0522a69-fb9e-53ff-8eec-0492669a13de","Path":"C:\\ProgramData\\Docker\\windowsfilter\\2c662c56ef3ffafe3f5cb6180ac24154c081866bb0a6c0e3c27fa5a3bcc957a7"}],"HostName":"0e3c581b7316","HvPartition":true,"EndpointList":["63F24577-D177-4DE9-8071-9325D00D5499"],"HvRuntime":{"ImagePath":"C:\\ProgramData\\Docker\\windowsfilter\\2c662c56ef3ffafe3f5cb6180ac24154c081866bb0a6c0e3c27fa5a3bcc957a7\\UtilityVM"},"AllowUnqualifiedDNSQuery":true}).
Run Code Online (Sandbox Code Playgroud)

docker docker-desktop

9
推荐指数
2
解决办法
2万
查看次数

托管C++程序集属性

有没有办法将程序集属性添加到托管C++程序集?在典型的C#项目中,AssemblyInfo.cs文件中通常有一行代码,如下所示:

[assembly: AssemblyTitle("Some Assembly")]

我有一个我想要添加的私有程序集属性(不是可以通过资源文件添加的版本属性之一),我不确定这是否可行.

.net attributes managed-c++

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

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

构建.netstandard nuget包时出现"错误MSB4057缺少目标包"

我正在尝试使用VS2017 RC 按照这些说明创建一个.netstandard nuget包.它构建良好,但当我尝试使用时创建包

msbuild /t:pack /p:Configuration=Release
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,我的解决方案中没有目标:

错误MSB4057:项目中不存在目标"pack".

我不确定该如何处理此消息或我应该在哪里修复它.有什么建议?

msbuild nuget visual-studio-2017 .net-standard

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