假设我有一个AppDomain.AssemblyResolve事件处理程序,在处理程序中我构造一个字节数组并调用该方法Assembly.Load(byte[]).此方法本身是否会AssemblyResolve再次引发事件,并导致我的处理程序重新进入?
我的问题不仅限于可以使用C#编译器生成的程序集,它们可以包含CLR支持的abritrary元数据和可执行代码.
我做了一些实验,发现时没有发现任何情况.我试图加载需要额外引用的程序集,尝试将CAS属性添加到加载的程序集,其解码需要另一个程序集,尝试使用模块初始化程序(全局.cctor方法)加载程序集.在任何情况下,我都没有观察到AssemblyResolve要从Assembly.Load(byte[])方法内部引发的事件,只有在某些代码稍后尝试访问加载的程序集中的类型,方法或属性时才会发生.但我可以在这里遗漏一些东西.
当从另一个程序集实例化时,我想在类库中执行某些代码.是否有类库的入口点或引导程序?我认为一个静态方法Main可以做到这一点,但我错了.此应用程序可能是配置和实例化记录器单例,未处理的异常处理程序等.
在.NET中,有些东西可以在加载程序集时自动在引用的程序集中运行一段代码.
例如,您可以使用位于项目Foo(A类库)中的某种属性来装饰类.项目栏(Web应用程序)只是引用项目Foo.当Bar加载时,Foo中的装饰代码以某种方式运行.我相信这是一个新功能.
谁能告诉这个功能叫什么?
更新:谢谢湿婆!不是模块初始化.虽然它引导我找到正确的答案.PreApplicationStartMethod,它在.NET中受支持!谢谢大家!!
我正在System.IO.FileNotFoundException: The specified module could not be found运行调用C++/CLI程序集的C#代码,后者又调用纯C DLL.只要实例化一个调用纯C DLL函数的对象,就会发生这种情况.
BackingStore是纯C.CPPDemoViewModel是C++/CLI调用BackingStore它有一个对BackingStore的引用.
我尝试了最简单的案例 - 添加一个新的C#单元测试项目,它只是试图创建一个在CPPDemoViewModel中定义的对象.我从C#项目添加了一个引用到CPPDemoViewModel.
只需添加对CPPDemoViewModel的引用,C++/CLI测试项目就可以正常运行,因此它可以在语言之间进行.
我正在使用Visual Studio 2008 SP1和.Net 3.5 SP1.我正在构建Vista x64,但一直小心确保我的平台目标设置为x86.
这感觉就像一些愚蠢而且显而易见的我不知道但是浪费时间试图私下解决它会让我更加愚蠢所以我在这里让自己感到尴尬!
这是对一个移植大量遗留C代码的项目的测试,我将其保存在一个带有在C++/CLI中实现的ViewModel的DLL中.
编辑 检查目录后,我可以确认尚未复制BackingStore.dll.
我拥有使用典型的多项目解决方案创建的标准唯一项目文件夹.
WPFViewModelInCPP
BackingStore
CPPViewModel
CPPViewModelTestInCS
bin
Debug
Debug
令我惊讶的是,更高级别的Debug似乎是C和C++/CLI项目使用的公共文件夹.
WPFViewModelInCPP\Debug包含BackingStore.dll,CPPDemoViewModel.dll,CPPViewModelTest.dll及其关联的.ilk和.pdb文件
WPFViewModelInCPP\CPPViewModelTestInCS\bin\Debug包含CPPDemoViewModel和CPPViewModelTestInCS .dll和.pdb文件,但不包含BackingStore.但是,手动将BackingStore复制到该目录并不能解决该错误.
CPPDemoViewModel具有属性Copy Local set,我假设它负责在引用if时复制其DLL.我无法将C#项目的引用添加到纯C DLL中 - 它只是说无法添加对引用存储的引用.
我不确定我是否只有一两个问题.
我可以使用老式的复制构建步骤将BackingStore.dll复制到任何给定的C#项目目录中,尽管我希望新的.net模型不需要这样做.
DependencyWalker告诉我丢失的文件是GPSVC.dll,已建议表明安全设置问题.我怀疑这是一只红鲱鱼.
edit2 将BackingStore.dll的手动副本与可执行文件相邻,GUI现在可以正常工作.C#测试项目仍有问题,我怀疑是由于测试项目的运行时环境,但我现在可以没有它.
这是非常奇怪的。我移植了一个在 VS2008 下运行良好的项目,但是当我用 VS2017 构建它时,一行的存在导致我的对话框调整大小 - 代码甚至不需要运行,它只需要出现在一个子例程中跑!我已经创建了我可以想出的最简单的程序版本来显示这种行为。尝试在不同版本的 Visual Studio 下构建/运行。我希望解释为什么会发生这种情况以及如何解决它。谢谢。
using System;
using System.IO;
using System.Windows.Forms;
using System.Windows.Media.Imaging; // Need reference to PresentationCore
namespace Test2017
{
public class MainDlg : Form
{
[STAThread]
static void Main() { Application.Run(new MainDlg()); }
public MainDlg()
{
SuspendLayout();
var button = new Button { Location = new System.Drawing.Point(7, 56), Size = new System.Drawing.Size(263, 23), Text = "Note size before and after clicking" };
button.Click += Button_Click;
ClientSize = new System.Drawing.Size(282, 253);
Controls.Add(button);
ResumeLayout(false);
PerformLayout(); …Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×4
asp.net ×1
assemblies ×1
c++-cli ×1
clr ×1
entry-point ×1
reflection ×1
unmanaged ×1