小编Nic*_*ick的帖子

从内存而非磁盘向CompilerParameters ReferenceAsAsmblies提供程序集?

我有一个CompilerParameters用于提供Microsoft.CSharp.CSharpCodeProvider对象的对象和ICodeCompiler从中派生的对象.

一切正常,我可以动态编译代码.我的问题是引用的程序集.现在,我只是将所有程序集添加System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()到编译器参数中ReferencedAssemblies.这适用于硬盘上的文件.但是我有一个在内存中而不在磁盘上的程序集.当我尝试引用它时,我得到了一个FileNotFoundException我期望的,因为它试图添加一个不存在的路径.

那么如何将实际Assembly对象传递给CompilerParameters.ReferencedAssemblies

我从2006年开始在网上看到一些帖子,之前说这根本不可能.我希望.net 3.5和.net 4.0已经添加了对这类内容的支持,但我不确定.

仅供参考,我使用的是.NET 4.0


此外,我现在正在程序空间的byte []创建一个临时文件,然后将该文件加载到程序集中.我知道编译器会在后台执行此操作,但我相信它也会自行清理.如果我能这样做会很棒:

CompilerParameters.ReferencedAssemblies.Add(Assembly a)
Run Code Online (Sandbox Code Playgroud)

.net c# assemblies

10
推荐指数
1
解决办法
1611
查看次数

需要知道申请何时结束

有没有办法监视使用该DLL的应用程序何时关闭?DLL和应用程序都是C#,Windows Forms也不是.

我可以检查主应用程序什么时候关闭,但我想让DLL看到"嘿程序正在关闭并释放我,我应该在我死之前快速做到这一点".

有办法吗?或者我不知道应用菜单"在你死之前做这个"?

c# dll resources

7
推荐指数
1
解决办法
6270
查看次数

C#CompileAssemblyFromSource,添加它需要的引用程序集?

我有CompileAssemblyFromSource工作的代码只引用我的程序(编译它)使用的程序集.它工作得很漂亮.

但是,如果我需要编译具有"使用blah"的代码 声明,它将无法找到blah并说它缺少资源.

因此,如果它是"System.Windows.Forms",并且我说"compilerparams.ReferencedAssemblies.Add("System.Windows.Forms.dll")",它可以工作.

所以我可以解析代码文件并获取所有"使用"参数,但我怎么知道那些应该是"*.dll"添加,或者它们是其他地方的命名空间或诸如此类的?有没有办法让.NET接收"System.Windows.Forms"并吐出"System.Windows.Forms.dll",因为这是它需要的东西等等?

c# compileassemblyfromsource

7
推荐指数
1
解决办法
2611
查看次数

c#isBackground线程没有正确终止

我有一个后台线程用于与GUI分开处理,一切都在线程之间正常工作.但是,当我关闭应用程序时,程序"关闭"但不会终止该过程.后台线程似乎保持程序活着.

我设置了"myThreadInstance.IsBackground = true;",我认为这需要C#在它被杀死时杀死它.

我在Visual Studio(2010,使用.NET 4.0)中测试了这一切,并且在第一次构建之后,其余都失败了,因为exe仍在使用中,因此它无法覆盖它.看着任务经理,就在那里.杀死Visual Studio会释放释放我的exe的vbhost进程.杀死我的exe进程,让vbhost在一两秒内重新生成它.

c# multithreading

5
推荐指数
1
解决办法
4209
查看次数

字典<T,Delegate>与不同类型的代理:清除,非字符串方法名称?

必须有一个更清洁的方法.目前我有:

... Constructor()
{
      parseDictionary = new Dictionary<typeOfStream, Delegate>()
            {
                {typeOfStream.SOME_ENUM_VAL, Delegate.CreateDelegate(typeof(ParseDelegate<string>), this, "MyMethod")},
                {typeOfStream.SOME_OTHER_ENUM_VAL, Delegate.CreateDelegate(typeof(ParseDelegate<XmlNode>), this, "MyOtherMethod")}
            };
}

public bool MyMethod(string some_string)
{
    ...
}

public bool MyOtherMethod(XmlNode some_node)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想摆脱"MyMethod"MyOtherMethod并将它变成这个.MyMethodthis.MyOtherMethod.选项?

我对任何允许我使用Dictionary查找的解决方案持开放态度,并将我的数据mojo指向任意方法(以及具有任意一组参数的已定义方法)以进行解析.

c# generics methods delegates dictionary

4
推荐指数
1
解决办法
3962
查看次数

c#将图像(缩放)绘制到图形,不进行正确插值.修复?

我的图像宽1px,有些高度.我需要在它的OnPaint事件的控件的整个宽度上绘制这个图像.我得到它绘制,但不正确.看起来当它伸展它时,它实际上并没有填满所有像素.好像插值是关闭的.有没有办法说"停止聪明,只是画出来"?我在图形对象的选项中看不到InterpolationMode.Off或.None.

我可以通过使用宽度为X的图像来确认我实际上绘制了整个宽度,其中X与控件的宽度相同.然后当它绘制时,它正常覆盖整个区域.然而,这个控件一直在调整大小,为了节省内存,所有使用1px宽图像的爵士乐在网络世界中是很正常的.这适用于桌面C#应用程序.有想法该怎么解决这个吗?

c# graphics interpolation gdi+ stretch

4
推荐指数
1
解决办法
3211
查看次数

C#:如何将DLL嵌入资源文件(程序目录中没有DLL复制)

我有一个需要X.dll的C#应用​​程序(项目A).我已经将生成X.dll的项目添加到了Visual Studio中作为参考.我还将X.dll的发布版本添加到A中的资源文件中作为二进制文件.我告诉项目A 不要将X.dll复制到输出目录.

现在我想要A.exe加载,说"嘿我找不到这个文件",然后查看资源文件并使用Assembly.Load(byte [])获取X.dll.我有代码重新魔术DLL,但这个代码永远不会被调用.

目前我有一个骨头简单的项目,只是试图让它工作.它编译好了.当我运行它时,我在X.dll上得到一个FileNotFoundException.

我有:

[STAThread]
static void Main()
{
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
Run Code Online (Sandbox Code Playgroud)

但*CurrentDomain_AssemblyResolve*中的断点永远不会被击中.我立即得到一个FileNotFoundException.当然有一些我遗失的东西?

c# embed dll resources assemblies

0
推荐指数
1
解决办法
4115
查看次数