标签: .net-assembly

数组类型在哪里?

如果我们想制作一个特定类型的数组类型,使用起来没有问题MakeArrayType(),例如数组char

typeof(char).MakeArrayType()
Run Code Online (Sandbox Code Playgroud)

当然用起来更直观typeof(char[])

Assembly类型的属性告诉我们该类型所在的程序集是什么。

因此,以下代码应该是在程序集中查找类型的合理示例:

var chars=new[] { '\x20' };
var typeofCharArray=chars.GetType();
var assembly=typeofCharArray.Assembly;
var doesContain=assembly.GetTypes().Contains(typeofCharArray);
Run Code Online (Sandbox Code Playgroud)

doesContain说它不是,它是false。无论数组类型是来自MakeArrayType()or typeof(),还是实例的 ,都会发生这种情况GetType

怀疑它是否被转发到我从Assembly.GetTypes读取的其他程序集。我尝试过:

var assemblyContainsTypeOfCharArray=(
        from it in AppDomain.CurrentDomain.GetAssemblies()
        let types=it.GetTypes()
        where types.Contains(typeof(char[]))
        select it).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

有趣的assemblyContainsTypeOfCharArraynull

数组类型在哪里?

c# clr jit .net-assembly

2
推荐指数
1
解决办法
234
查看次数

C# 避免在 Assembly.Load 时锁定文件

我的情况是;

我正在设计一个插件应用程序,基于动态加载插件程序集,多个用户可以运行托管在服务器机器上的应用程序。应用程序在启动时从我的实时更新服务器自动更新插件程序集。所以插件文件(及其附属 dll 不应该被锁定在文件系统上。

 byte[] assemblyBytes = File.ReadAllBytes("asm-path");
 var assembly = Assembly.Load(assemblyBytes);
Run Code Online (Sandbox Code Playgroud)

正如预期的那样没有锁定 dll 文件。但是如果我正在加载的 dll 本身具有静态引用 dll 呢?他们现在被锁定在文件系统上。

命名文件,让我们说;

  • APP.Exe 是我的基础应用程序;
  • PL1.dll 是我的第一个插件,APP.exe 将它加载到一个新的 Appdomain
  • PL2.dll 是我的第二个插件,APP.exe 将它加载到一个新的 Appdomain 中
  • PL1_S.dll 是 PL1.dll 插件的静态引用 dll,加载在 PL1 AppDomain 中
  • PL_COMMON 是 PL1 和 PL2 插件的静态引用 dll,由 PL1 和 PL2 AppDomains 加载

PL1_S 和 PL_COMMON 也不应该像 PL1 和 PL2 程序集那样被锁定在文件中

关于如何解决这个问题的任何想法?

c# dll filelock .net-assembly

2
推荐指数
1
解决办法
2985
查看次数

检查部署计算机上 .net 程序集的强名称

这是场景...我在远程计算机上部署了一个 dll,该计算机具有所需的 .NET 框架,但没有 Visual Studio 和工具。同一天,我为 dll 创建了 3 个具有不同强名称的版本。我需要验证远程计算机上的强名称,但我没有机会获得该 dll 的副本。如果远程计算机上没有 SDK,我该如何执行此操作?

.net strongname .net-assembly

2
推荐指数
1
解决办法
1371
查看次数

为什么我可以在 web.config 中有多个相同的绑定重定向?

假设我有一个web.config具有以下两个相同部分的内容:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>


<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

为什么这会起作用,如果有人更改重定向之一,例如改为newVersion="4.0.0.0"而不是 ,会发生什么newVersion="6.0.0.0"

c# asp.net .net-assembly

2
推荐指数
1
解决办法
1059
查看次数

反编译导致错误CS1112,汇编混乱

于是我通过de4dot运行了一个C#大学程序,然后通过reflector反编译,在VS中运行时出现如下错误。

[程序集:System.Runtime.CompilerServices.Extension]

错误 CS1112 不要使用“System.Runtime.CompilerServices.ExtensionAttribute”。请改用“this”关键字。客户端 C:\Users\user\Desktop\333\as2\decom\AssemblyInfo.cs 15 Active

我尝试用 this 和 this() 替换代码,但这只会导致其他问题。有人能解释一下我要用“这个”代替什么吗?我觉得我在这里遗漏了一些明显的东西。

.net c# decompiling .net-assembly compiler-services

2
推荐指数
1
解决办法
4552
查看次数

单独程序集中的 EditorTemplate 模板

是否可以将 ASP.NET Core Web 应用程序配置为使用编译EditorTemplate到类库/单独程序集中的 razor 页面?

作为示例,以下问题详细说明了如何ViewComponent将 a 编译为类库。不幸的是,我找不到任何有关对EditorTemplate页面执行相同操作的信息。

ASP.NET MVC 6:在单独的程序集中查看组件

class-library .net-assembly mvc-editor-templates asp.net-core-mvc asp.net-core

2
推荐指数
1
解决办法
1031
查看次数

NETCore1.1中如何设置AssemblyTitleAttribute

在.NETCore1.1中,接下来的代码

typeof(Program).GetTypeInfo().Assembly.GetCustomAttributes().ToList()
Run Code Online (Sandbox Code Playgroud)

返回自定义程序集属性列表,其中之一是AssemblyTitleAttribute. 默认情况下,此属性值返回项目名称,但如何设置其他值?

尝试按照此处AssemblyInfo.cs描述的方式添加程序集信息文件,但出现错误

错误CS0579:重复的“System.Reflection.AssemblyTitleAttribute”属性

.net assembly-attributes .net-assembly .net-core

2
推荐指数
1
解决办法
596
查看次数

具有内部构造函数的最小起订量具体类

我正在尝试 Moq 一个具有内部构造函数的具体类,即,MyAssembly我有

public class MyClass {

    internal MyClass(){}

    // other methods including factory instance method
}
Run Code Online (Sandbox Code Playgroud)

然后在“TestAssembly”中的测试中我有

var mock = new Mock<MyClass>();
Run Code Online (Sandbox Code Playgroud)

我已将MyAssembly以下内容添加到AssemblyInfo.cs

[assembly: InternalsVisibleTo("TestAssembly")]
Run Code Online (Sandbox Code Playgroud)

但即使设置TestAssembly为 的朋友MyAssembly,Moq 仍然会抛出错误

Castle.DynamicProxy.InvalidProxyConstructorArgumentsException
Can not instantiate proxy of class: Civica.Metadata.Models.Entities.Stage.
Could not find a parameterless constructor.
Run Code Online (Sandbox Code Playgroud)

Moq 是否应该能够以这种方式使用内部构造函数创建模拟?

c# moq .net-assembly

2
推荐指数
1
解决办法
1381
查看次数

.net在运行时重新加载程序集

我搜索了很多有关在.NET中在运行时重新加载程序集的内容。我可以找到的唯一方法是使用另一个AppDomain。但这使事情变得非常复杂。就我而言,这几乎是不可能的,因为将在运行时加载的程序集中的类不会继承自MarshalByRefObject。我看过Unity游戏引擎。编辑器在运行时构建组件,仅使用编译的程序集。这怎么可能?

.net c# .net-assembly unity-game-engine

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

C# 错误 CS0117:“数组”不包含以下定义

我正在尝试在我的程序中使用Array.Fill,但收到一条错误消息,指出没有Fill. 我在这篇文章的标题中省略了函数名称,因为Array. 我在网上发现了多个论坛帖子,人们有同样的问题,对他们来说,解决方案是添加using System;using System.Linq;,但我已经有了这两个。我怀疑问题是我需要以某种方式添加System.Runtime.dll包含 定义的程序集Array.Fill,但我将 Unity 与 Visual Studio for Mac 一起使用,并且我无法找到在任一程序中管理程序集的方法。我也无法在任何地方找到项目或解决方案文件(我相信这就是我要添加程序集的地方)。这是问题线:

Array.Fill<Vector4>(cross, Rot4.Cross(vs[0], vs[1], vs[2]));
Run Code Online (Sandbox Code Playgroud)

有谁知道我可以尝试什么?我想我可以手动填充数组,但我想知道为什么这不起作用。

c# linq .net-assembly unity-game-engine visual-studio-mac

2
推荐指数
1
解决办法
3638
查看次数