草庐IT

Assemblies

全部标签

c# - 从内存而不是磁盘向 CompilerParameters ReferencedAssemblies 提供程序集?

我有一个CompilerParameters对象,我用它来提供一个Microsoft.CSharp.CSharpCodeProvider对象和一个派生自该对象的ICodeCompiler对象。一切正常,我可以即时编译代码。我的问题是引用的程序集。现在,我只是将System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()中的所有程序集添加到编译器参数的ReferencedAssemblies中。这适用于硬盘上的文件。但是我有一个程序集在内存中而不是在磁盘上。当我尝试引用它时,我得到了一个FileNo

c# - 为什么我的 .NET 启动时间随着预生成的序列化程序集而增加?

我有一个相当大且复杂的winforms应用程序。为了减少启动时间,我使用以下批处理文件预先生成了序列化程序集。;deleteanyexistingserializationassembliesdel*XmlSerializers.dll;gennewserializationassembliesfor%%ain(*.dll)dosgen/assembly:%%a;delete.deletedfiles(generatedforassemblieswhichdonotallowserialization)del*.dll.deleted*然而,令我惊讶的是,启动时间实际上从4.6秒增加到

c# - 卸载 CodeDom 编译的程序集

我有一些在运行时编译的C#代码(我们称它为“脚本”)。它在我用来访问其功能的主程序中使用了一个接口(interface)。编译完成后,我有CompilerResults.CompiledAssembly,在这种情况下,我可以CreateInstance(Type)。一旦我使用完脚本,我想完全卸载。据我了解,如果我创建一个单独的应用程序域,我只能这样做:LoadingDLLsintoaseparateAppDomain我有一些关于我的实现的问题:如果我有多个脚本要编译并想独立卸载它们,我是否必须为每个脚本创建单独的应用程序域?我应该使用哪些应用域名?GUID是个好主意吗?是否有任何我应该

c# - 如何在 AssemblyResolve 事件之前在运行时加载程序集?

实际上,我试图在我的解决方案中实现某种“静态链接”程序集。所以我尝试了以下方法:使用CopyLocal=false添加对我的程序集的引用使用“添加为链接”将.dll文件本身添加到我的解决方案使用“添加资源”-“添加现有文件”将.dll文件本身添加到我的资源将我的程序集中的一些类型添加到Form1中作为privateMyObjecttemp=newMyObject();完成这些步骤后,我得到了预期的FileNotFoundException。因此,让我们尝试使用这个快速技巧在AssemblyResolveEvent中加载程序集AppDomain.CurrentDomain.Assembl

c# - 我可以在一个程序集中同时使用 C# 和 C++/CLI 吗?

我能否将C#和C++/CLI源文件放在一个项目中,然后编译它们以获得单个.DLL程序集? 最佳答案 您可以使用命令行工具从c++/cli和c#中的代码获取单个DLL。假设您有两个文件:带有C++/CLI代码的A.cc和带有C#代码的B.cs。它应该看起来像这样:首先将c++代码编译成.obj文件cl.exe/MD/c/clrA.cc将c#代码编译到“模块”中,添加之前使用/addmodule开关创建的.obj:csc.exe/target:module/addmodule:A.objB.cs然后将模块链接到单个DLL:link.ex

c# - 以编程方式检索正在运行的服务的程序集版本

我想访问我用ServiceController类“控制”的服务的程序集版本信息。(即,我想显示“2.3.1.23”),但是我找不到任何关于检索程序集版本的信息……这有可能吗?编辑:澄清一下……我只知道在本地计算机上运行的服务的名称。我想访问该服务的“FileVersionInfo”(更好的说法是服务exe),但我不知道该服务exe位于何处。 最佳答案 如果我没理解错的话,你想要获取任何服务exe的版本。假设您知道服务的可执行文件的名称和路径,您可能想尝试:FileVersionInfoversionInfo=FileVersionI

c# - 有没有办法判断 C# 程序集是否已使用优化参数编译?

相反,有没有办法判断它是在启用还是禁用优化参数的情况下编译的。我不想知道它是发布版还是调试版,因为可以启用或不启用优化。从我的角度来看,即使代码说它是发布版本,它真的是优化过的吗?谢谢。 最佳答案 一种检查方法是查看程序集上的DebuggableAttribute(doc)。如果C#编译器传递了/optimize选项,则不会设置DisableOptimizations标志。注意:虽然这适用于大多数情况,但这并不是100%万无一失的解决方案。至少可以通过以下方式破解它使用具有不同语义的另一种语言进行编译以进行优化如果用户手动定义了De

C#:如何从 GAC 加载程序集?

我在GAC中有“mycomp.myassembly.dll”,但Load和LoadFrom抛出文件未找到异常并且LoadWithPartialName返回null。我正在执行以下操作:AssemblyNamename=newAssemblyName();name.Name="mycomp.myassembly.dll";Assemblyassembly=Assembly.Load(name);对于mycomp.myassembly.dll文件的FileNotFound失败,并且Assemblyassembly=Assembly.Load("mycomp.myassembly.dll")

c# - 项目之间的 VS2010 程序集引用失败

上下文:我的解决方案中有3个项目(C#、.NET4.0):Abc.Business(Dll项目)Abc.Test(测试项目)Abc.Ui(Wpf项目)Abc.Business是我的业务逻辑。它包含实体、管理器、服务等。Abc.Test有一个关于Abc.Business的项目引用并且是单元测试。他们运作良好。Abc.Ui有一个关于Abc.Business的项目引用Abc.Ui无法解析所有usingAbc.Business;错误日志显示:ErrorThetypeornamespacename'Business'doesnotexistinthenamespace'Abc'(areyoumi

c# - 通过 PublicKeyToken 防止外部程序集注入(inject)

我正在使用以下代码:AppDomain.CurrentDomain.AssemblyLoad+=(sender,args)=>{vartoken=args.LoadedAssembly.GetName().GetPublicKeyToken();if(!IsValidToken(token)){Process.GetCurrentProcess().Kill();}};其中IsValidToken()将正在加载的程序集的公钥token与在我的应用程序中硬编码为字节数组的授权公钥token列表进行比较。这是防止代码注入(inject)攻击的良好安全措施吗?另外,考虑到我稍后会使用NetR