如果我们想制作一个特定类型的数组类型,使用起来没有问题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)
有趣的assemblyContainsTypeOfCharArray是null。
数组类型在哪里?
我的情况是;
我正在设计一个插件应用程序,基于动态加载插件程序集,多个用户可以运行托管在服务器机器上的应用程序。应用程序在启动时从我的实时更新服务器自动更新插件程序集。所以插件文件(及其附属 dll 不应该被锁定在文件系统上。
byte[] assemblyBytes = File.ReadAllBytes("asm-path");
var assembly = Assembly.Load(assemblyBytes);
Run Code Online (Sandbox Code Playgroud)
正如预期的那样没有锁定 dll 文件。但是如果我正在加载的 dll 本身具有静态引用 dll 呢?他们现在被锁定在文件系统上。
命名文件,让我们说;
PL1_S 和 PL_COMMON 也不应该像 PL1 和 PL2 程序集那样被锁定在文件中
关于如何解决这个问题的任何想法?
这是场景...我在远程计算机上部署了一个 dll,该计算机具有所需的 .NET 框架,但没有 Visual Studio 和工具。同一天,我为 dll 创建了 3 个具有不同强名称的版本。我需要验证远程计算机上的强名称,但我没有机会获得该 dll 的副本。如果远程计算机上没有 SDK,我该如何执行此操作?
假设我有一个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"?
于是我通过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() 替换代码,但这只会导致其他问题。有人能解释一下我要用“这个”代替什么吗?我觉得我在这里遗漏了一些明显的东西。
是否可以将 ASP.NET Core Web 应用程序配置为使用编译EditorTemplate到类库/单独程序集中的 razor 页面?
作为示例,以下问题详细说明了如何ViewComponent将 a 编译为类库。不幸的是,我找不到任何有关对EditorTemplate页面执行相同操作的信息。
class-library .net-assembly mvc-editor-templates asp.net-core-mvc asp.net-core
在.NETCore1.1中,接下来的代码
typeof(Program).GetTypeInfo().Assembly.GetCustomAttributes().ToList()
Run Code Online (Sandbox Code Playgroud)
返回自定义程序集属性列表,其中之一是AssemblyTitleAttribute. 默认情况下,此属性值返回项目名称,但如何设置其他值?
尝试按照此处AssemblyInfo.cs描述的方式添加程序集信息文件,但出现错误
错误CS0579:重复的“System.Reflection.AssemblyTitleAttribute”属性
我正在尝试 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 是否应该能够以这种方式使用内部构造函数创建模拟?
我搜索了很多有关在.NET中在运行时重新加载程序集的内容。我可以找到的唯一方法是使用另一个AppDomain。但这使事情变得非常复杂。就我而言,这几乎是不可能的,因为将在运行时加载的程序集中的类不会继承自MarshalByRefObject。我看过Unity游戏引擎。编辑器在运行时构建组件,仅使用编译的程序集。这怎么可能?
我正在尝试在我的程序中使用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)
有谁知道我可以尝试什么?我想我可以手动填充数组,但我想知道为什么这不起作用。
.net-assembly ×10
c# ×7
.net ×4
.net-core ×1
asp.net ×1
asp.net-core ×1
clr ×1
decompiling ×1
dll ×1
filelock ×1
jit ×1
linq ×1
moq ×1
strongname ×1