我有一个奇怪的问题.我想删除已加载的程序集(硬盘上的plugin.dll),但程序集被操作系统(vista)锁定,即使我已卸载它.
FE
AppDomainSetup setup = new AppDomainSetup();
setup.ShadowCopyFiles = "true";
AppDomain appDomain = AppDomain.CreateDomain(assemblyName + "_AppDomain", AppDomain.CurrentDomain.Evidence, setup);
IPlugin plugin = (IPlugin)appDomain.CreateInstanceFromAndUnwrap(assemblyName, "Plugin.MyPlugins");
Run Code Online (Sandbox Code Playgroud)
我还需要assemblyinfos,因为我不知道pluginassembly中的哪些类实现了IPlugin接口.在一个Pluginassembly中应该可以有多个插件.
Assembly assembly = appDomain.Load(assemblyName);
if (assembly != null) {
Type[] assemblyTypes = assembly.GetTypes();
foreach (Type assemblyTyp in assemblyTypes) {
if (typeof(IPlugin).IsAssignableFrom(assemblyTyp)) {
IPlugin plugin = (IPlugin)Activator.CreateInstance(assemblyTyp);
plugin.AssemblyName = assemblyNameWithEx;
plugin.Host = this;
}
}
}
AppDomain.Unload(appDomain);
Run Code Online (Sandbox Code Playgroud)
如何在不锁定程序集的情况下从appDomain获取assemblyinfos?
最好的祝福
我们在Win Forms项目中遇到了一个非常有趣的问题.它已经解决了.我们知道发生了什么,但我们想知道它为什么会发生.这可能有助于将来遇到类似问题的其他人.
WinForms项目在我们客户的两台PC上失败了.该错误是一个模糊的kernel.dll错误.该项目在另外3台PC上运行良好.
我们发现我们的发布文件夹中缺少.DLL(log4net.dll - 一个非常流行的开源日志库).它以前在我们的发布文件夹中.为什么在最新版本中缺少它?
它丢失了,因为我必须在我的开发盒上安装了一个程序,该程序使用了log4net.dll,并将其添加到全局程序集缓存中.
当我检查解决方案对log4net.dll的引用时,它们被更改为"copy local = FALSE".它们必须自动更改,因为我的GAC中存在log4net.dll.
这是我的问题开始的地方:
为什么我对log4net.dll的引用从COPY LOCAL = TRUE更改为COPY LOCAL = FALSE?我怀疑是因为它是由另一个程序添加到我的GAC中的.
我们怎样才能防止这种情况再次发生?现在,如果我安装一个使用公共库的软件并将其添加到我的GAC,那么引用该DLL的我的SLN将从Copy Local TRUE更改为FALSE.
我最近以内在函数的形式使用了x86 SIMD指令(SSE1234).我发现令人沮丧的是,SSE ISA有几个简单的指令,只能用于浮点数或仅用于整数,但理论上它们应该同样适用于两者.例如,float和double向量都有指令从地址(movhps,movhpd)加载更高的64位128位向量,但是没有这样的整数向量指令.
我的问题:
在整数向量上使用浮点指令时是否有任何理由期望性能受到影响,例如使用movhps将数据加载到整数向量?
我写了几个测试来检查,但我认为他们的结果不可信.编写一个正确的测试来探索这些事情的所有极端情况真的很难,特别是在这里可能涉及指令调度时.
相关问题:
其他平凡相似的东西也有几个基本相同的指令.例如,我可以使用por,orps或orpd按位OR .任何人都可以解释这些附加说明的目的是什么?我想这可能与应用于每条指令的不同调度算法有关.
通常我以前做的是将文件拖放到GAC文件夹中.
这适用于Windows 2000和2003,但是当我尝试在Windows Server 2008中执行此操作时,我得到"访问被拒绝".
执行此操作的用户是本地管理员.
我能找到的唯一参考是: 论坛链接
还有另一种方法来实现这一目标吗?
注意:我尝试以管理员身份运行资源管理器,但是我收到同样的错误.
编辑:理想情况下,无论什么解决方案都不应该关闭UAC,或安装任何软件开发工具包.(因此它可以应用于生产服务器).
编辑:有没有人对此有任何想法?我目前已经开始禁用开发中的UAC,但这在现场是不可接受的.
我想使用IronPython创建一个程序集,可以从C#中调用它.这是我不问的两件事.
我不是问如何从IronPython中调用C#.最容易找到的文档描述了如何从IronPython中调用C#.(例如,IronPython附带的教程.)我想反过来,从C#调用IronPython.
我不是问如何嵌入IronPython解释器.我已经找到了几个有用的参考资料(例如这里和这里),介绍如何从C#调用IronPython解释器.这很有帮助,但我更感兴趣的是从IronPython创建一个已编译的程序集.也就是说,我想对IronPython程序集进行方法调用,而不是将源代码字符串传递给解释器.
一旦我创建了程序集,有什么关于调用它的技巧?一个博客帖子,我发现说:
...从C#调用Python程序集是非常重要的.该python程序集包含动态类型,这些类型不容易反映到有用的C#对象中.
你知道在IronPython和C#之间传递基本数据类型的任何备忘单吗?
更新:我现在最感兴趣的场景是将两个或三个double值传递给Python并double返回一个或两个值.如果我可以传入一个字符串并获得一个非常棒的字符串,但我的首要任务就是来回传递数字.
我们正在开始一个基于8051微控制器的新项目.
问题:
我刚开始研究ARM汇编语言,并不清楚如何使用MOV将立即数转移到寄存器中.
从ARM参考手册和我的教科书中可以看出,MOV指令后的立即数范围是0-255.但是,当我在ADS 1.2 IDE中使用我自己的PC进行测试时,指令
MOV R2, #0xFFFFFFFF
Run Code Online (Sandbox Code Playgroud)
表现很好.根据规格,数字0xFFFFFFFF不在范围之外吗?
希望有人能帮我一臂之力.
问候.
我试图弄清楚当你动态生成程序集时,是否有可能引用先前动态生成的程序集中的类型.
例如:
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;
CodeDomProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
CompilerResults results = provider.CompileAssemblyFromSource(parameters, @"
namespace Dynamic
{
public class A
{
}
}
");
Assembly assem = results.CompiledAssembly;
CodeDomProvider provider2 = new CSharpCodeProvider();
CompilerParameters parameters2 = new CompilerParameters();
parameters2.ReferencedAssemblies.Add(assem.FullName);
parameters2.GenerateInMemory = true;
CompilerResults results2 = provider2.CompileAssemblyFromSource(parameters2, @"
namespace Dynamic
{
public class B : A
{
}
}
");
if (results2.Errors.HasErrors)
{
foreach (CompilerError error in …Run Code Online (Sandbox Code Playgroud) For example:
.text
.align 2
.global main
.equ val,0x4712 # 16-bit binary code for 0x4712: 0100 0111 0001 0010
# Program code starts now
main: # This label must be main:, not MAIN:
movi r16,val # WHAT WOULD THIS LINE BE IN BINARY?
movi r17,0
loop: addi r17,r17,1
subi r16,r16,1
bne r16,r0,loop
stop: br stop
.end
Run Code Online (Sandbox Code Playgroud) C++ 11范围的枚举器(enum class语法)不转换为整数,因此它们不能直接用作数组索引.
在以这种方式使用它们时,获得范围界定的最佳方法是什么?
我已经提供了几个答案,但请添加更多想法!