标签: .net-assembly

预加载所有组件(JIT)

我们正在第一次加载一些重型UI屏幕.我们的项目分为一个主要的可执行文件和几个DLL文件.DLL文件还可以包含UI屏幕,这些屏幕在第一次加载时很慢.

有没有办法(在代码中)我们可以预加载所有引用的程序集,以避免JIT编译命中?

我知道有一种名为NGen的工具.是否可以在开发环境中运行NGen,以便我们可以立即看到它的影响?但理想情况下,我们希望从代码中预加载引用的程序集.

使用C#.NET 3.5和DevExpress作为UI组件.

c# performance jit assemblies .net-assembly

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

如何查找.NET命名空间的程序集名称,例如Microsoft.WindowsAzure.ServiceRuntime

我有一个通用的问题和具体的例子.根据Stack Overflow关于名称空间程序集的所有类似问题,这应该很容易.最常见的答案是问题我如何知道要包含哪些引用来导入特定的.NET命名空间?.

"所有MSDN文档页面都提到命名空间和汇编."

但是在这个MSDN页面上没有提到程序集.我错过了什么明显的事情?

Microsoft.WindowsAzure.ServiceRuntime命名空间

修订:

更具体地说,我正在寻找包含Azure类RoleEnvironment的DLL文件.当我点击F1并查看其MSDN页面MSDN RoleEnvironment时,它提到了Microsoft.WindowsAzure.ServiceRuntime命名空间,但没有要包含的程序集.我之前遇到过这样的事情,所以我想我会把它变成一个普通的问题.虽然我想知道要引用的特定DLL文件,但我也想知道答案,所以我知道下次遇到这种情况时该怎么做.

.net azure .net-assembly

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

访问新签名的第三方DLL会出错

我有一个使用第三方DLL的签名应用程序.这些DLL没有签名. - 到目前为止第一步没有问题:我刚刚签署了它们(使用ildasm.exe获取*.il,*.il中的publickeytoken,因为它们具有相互依赖关系,并使用ilasm.exe创建*.dll)

该项目现在编译良好,也启动.

但是在我的代码中,调用第三方DLL的类构造函数(或其他东西? - 这是我做的第一件事),我得到错误"强名称签名程序集必须在其中指定一个公钥InternalsVisibleTo声明"

如果你有DLL的源代码似乎没有问题,并且可以通过设置调整AssemblyInfo.cs

[assembly: InternalsVisibleTo("MyProject.Domain.Tests, PublicKey=..."]
Run Code Online (Sandbox Code Playgroud)

但是:如上所述,我有一个第三方DLL我没有源.所以没办法像这样解决问题.

有什么建议让这个运行?

.net dll strongname .net-assembly

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

Trace.WriteLine无法在使用CSharpCodeProvider编译的动态加载程序集中工作

有没有人有任何见解,为什么在动态加载(使用Assembly.CreateInstance)程序集内部调用Trace调用时不会产生输出?奇怪的是,Debug.WriteLine在程序集内工作正常,并且正在进行动态加载的程序集内的Trace调用也可以正常工作.我已经确认Trace.Listeners包含正确的侦听器对象(与Debug.Listeners相同)但是对Trace的调用只是不生成任何输出.

这对我来说是一个巨大的诊断问题,因为我的整个应用程序都是通过自定义TraceListener进行日志记录.

更新:(从下面的评论)我正在使用CSharpCodeProvider动态构建程序集,但我没有/d:TRACE在CompilerParameters.CompilerOptions中提供开关.因此,TRACE没有在程序集中定义,我对Trace的调用基本上被忽略了.另外值得一提的是,我设置CompilerParameters.IncludeDebugInformation = true这可以解释为什么我正在调试,即使我没有明确设定/d:DEBUGCompilerParameters.CompilerOptions.这只是猜测 - 在MSDN文档中没有任何内容表明这是真的.

这里的底线是,当使用CSharpCodeProvider动态编译源时,任何特定于程序集的内容都取决于您明确定义.

.net c# dll .net-assembly

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

装配不在GAC,但gacutil显示它在那里

我注意到我的系统上有关全局程序集缓存(GAC)的一些奇怪行为.我感兴趣的程序集是log4net Version = 1.2.11.0

输出gacutil /l "log4net"是:

C:\ Windows\system32> gacutil/l"log4net"Microsoft(R).NET全局程序集缓存实用程序.版本4.0.30319.1版权所有(c)Microsoft Corporation.版权所有.

全局程序集缓存包含以下程序集:
log4net,Version = 1.2.10.0,Culture = neutral,PublicKeyToken = 1b44e1d426115821,processorArchitecture = MSIL
log4net,Version = 1.2.11.0,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a,processorArchitecture = MSIL

物品数量= 2

但是,通过资源管理器shell(重新启动之前和之后)查看GAC只显示一个版本:

在此输入图像描述

由于我的应用程序无法解析程序集,但是当我将它放入应用程序库(bin文件夹)时工作正常,这一点更加复杂.根据这篇文章,GAC将在应用程序基础之前进行探测- 这将指向程序集不在GAC中.

log4net Version=1.2.11.0GAC 也是如此?如果是这样,为什么我的应用程序找不到它?

.net c# gac global-assembly-cache .net-assembly

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

如何在运行,加载和使用中编译C#DLL

A)动态编译C#EXE和DLL是相对容易的.
B)执行EXE意味着运行新的应用程序.加载DLL意味着可以在可以在应用程序或项目之间共享的情况下使用方法和函数.

现在,可以从MSDN或为方便起见,找到编译EXE(或轻微修改,DLL)的最快最简单的方法:

private bool CompileCSharpCode(string script)
{
lvErrors.Items.Clear();
    try
    {
        CSharpCodeProvider provider = new CSharpCodeProvider();
        // Build the parameters for source compilation.
        CompilerParameters cp = new CompilerParameters
        {
            GenerateInMemory = false,
            GenerateExecutable = false, // True = EXE, False = DLL
            IncludeDebugInformation = true,
            OutputAssembly = "eventHandler.dll", // Compilation name
        };

        // Add in our included libs.
        cp.ReferencedAssemblies.Add("System.dll");
        cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
        cp.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");

        // Invoke compilation. This works from a string, but you can also load from a file using …
Run Code Online (Sandbox Code Playgroud)

c# runtime compilation appdomain .net-assembly

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

如何在Process.Start上使用Microsoft Fakes Assemblies

我想模拟System.Diagnostics.Process.Start调用,所以我为系统程序集添加了一个Fakes Assembly.

问题是StartSystem.Diagnostics.Process上的一个静态方法,所以我没有得到一个垫片,能够在Start方法的委托上进行操作.

这样做的正确方法是什么?

c# stub shim .net-assembly microsoft-fakes

4
推荐指数
2
解决办法
1928
查看次数

如何使用objective-C加载dylib或.a(静态库)文件?

C#代码:( windows)

Assembly assembly = Assembly.LoadFrom(AssemblyPath);
System.Type[] objTypes = assembly.GetTypes();
Type libType = null;
Run Code Online (Sandbox Code Playgroud)

我想为Mac实现相同的功能,其中AssemblyPath是静态库(libTEST.a)或dylib文件的路径.在Objective-C(Mac)中可以吗?我试过NSBundle.但我想要一些好的解决方案.

macos objective-c .net-assembly

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

添加此项目将导致循环依赖

我有一个由两个程序集组成的WPF应用程序.

程序集A是一个wpf应用程序.

程序集B是一个3D应用程序,主要由A使用的公共API.

程序集A引用程序集B.

现在当一个事件触发程序集时,BI需要在静态类应用程序中调用程序集A中的方法.

如果我尝试在BI中添加对程序集A的引用,则会收到错误:

添加此项目将导致循环依赖

你对如何解决它有什么想法吗?

具体来说,我想知道:

  • 如何打电话给App.myMethod()A assembly B
  • 为了解耦类,我可以在程序集B上触发一个通用事件并在程序集A上捕获它吗?
  • 欢迎任何其他想法.

.net c# wpf .net-assembly

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

引用的项目依赖项DLL不被复制

我的项目解决方案当前有三个项目:

  1. MyProject,这是我的主要启动项目(使用.NET Framework 4.7)-WPF,特定于用户界面,
  2. MyProject.Core-类库(.NET Standard 2.0)-保存模型以及所有“幕后”数据
  3. MyProject.Relational-类库(.NET Standard 2.0)-负责处理和保存数据库特定的信息

Project 1(主要)已为project 2和设置了引用3

对于项目,3我已经安装了的NuGet依赖项Microsoft.EntityFrameworkCore.Sqlite (2.0.3)

现在,当我最终想要使用项目3并调用它的方法时,将引发以下异常:

System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.EntityFrameworkCore, Version=2.0.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

当然,这是一个丢失的DLL文件-没有实体框架DLL被复制到app Debug目录。

为什么会这样呢?这是预期的行为吗?我是否还必须安装Microsoft.EntityFrameworkCore.Sqlitefor项目的依赖项1?对于我而言,毫无意义,因为它引用了没有使用它的项目依赖项。

我尝试了什么:

  • 清理项目,删除bin / obj目录,
  • 将项目参考属性设置设置copy localTrue
  • 在此问题中给出的解决方案: …

c# dll dependencies .net-assembly visual-studio-2017

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