标签: .net-assembly

程序集文件重命名和Assembly.LoadFile

所以情况如下:

我有一个名为Lib1.dll的程序集.出于某种原因(与问题无关)我不得不将程序集文件名重命名为Lib1New.dll,现在尝试使用Assembly.LoadFile加载重命名的程序集时,我注意到CLR也尝试加载Lib1.dll.

如果在搜索路径中找到Lib1.dll,它将被加载到地址空间中.无论是否找到Lib1.dll,该应用程序都能正常运行.(问题是如果发现Lib1.dll文件被锁定,其他进程无法删除).

在此输入图像描述

我不明白为什么LoadFile搜索并加载Lib1.dll.LoadFile应该在指定位置加载程序集文件的内容,为什么它在搜索文件.

LoadFile的MSDN文档:

使用LoadFile方法加载和检查具有相同标识但位于不同路径的程序集.LoadFile不会将文件加载到LoadFrom上下文中,也不会像LoadFrom方法那样使用加载路径解析依赖关系.LoadFile在这种有限的场景中很有用,因为LoadFrom不能用于加载具有相同标识但路径不同的程序集; 它只会加载第一个这样的组件.

c# clr file-io .net-assembly

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

引用从也使用其中一些包的项目中使用NuGet包的程序集

我有一个复杂的库A,包含几个生成以下程序集的c#项目:

  • 核心
  • A.Caching
  • A.Logging
  • A.MongoDb

该库是由我编写的,我可以完全访问其源代码.这取决于几个NuGet包,假设它们是:

  • mongocsharpdriver
  • EnterpriseLibrary.Caching
  • EnterpriseLibrary.Logging

这些库(MongoDb驱动程序和EntLib)未安装在GAC中.

我还有一个Web项目B,我想在其中使用库A作为DLL的引用(不包括项目到解决方案B).Web项目依赖于几个NuGet包,其中包括:

  • mongocsharpdriver
  • EnterpriseLibrary.Logging

在解决这些包的版本A,并B为他们没有同步发展不匹配.图书馆A是在一年前开发的,从那时起就一直使用.

问题:分发库的正确方法是什么,A以便:

  1. 即使A没有引用lib 依赖项,任何解决方案都可以使用它.
  2. 如果解决方案具有自己的lib A依赖项版本,则它们不会发生冲突.

我目前的做法:

  1. 从我的解决方案中,我参考了四个dll : A.Core, A.Caching, A.Logging, A.MongoDb.
  2. 然后,如果它们不存在,我将其所有NuGet依赖项添加到解决方案中.
  3. 它有时会破坏,因为解决方案B使用mongocsharpdriver 1.5版,lib A使用1.1版(版本不兼容).

那么,我该怎么办?处理冲突引用与引用引用的正确方法是什么?

.net c# assemblies .net-assembly nuget

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

获取AppDomain中所有可用命名空间的列表

我需要在运行时"扫描"所有已加载程序集的活动AppDomain,并获取这些程序集中可用的唯一名称空间列表,.NET支持吗?

代码必须在运行时执行,以便代码是动态的.

我刚开始使用C#进行编码,所以我不确定从哪里开始,所以任何帮助都将受到赞赏.

c# dynamic appdomain .net-assembly

5
推荐指数
2
解决办法
1037
查看次数

将程序集加载到applicationBase C#的AppDomain外部站点

最近我一直致力于一个项目,其中应用程序(或可执行文件,无论你想要什么)都需要能够加载和卸载在可执行文件夹找不到的程序集.(甚至可能是另一个驱动器)

为了举个例子,我希望能够将我的应用程序放在D:\ AAA\theAppFolder中,并将DLL文件的程序集放在C:\ BBB\Assemblies

仔细观察,我发现AppDomain允许卸载自己和任何附加程序集的能力,所以我想我会试一试,但是经过几个小时的尝试后似乎有问题:AppDomains看不到外面的任何地方应用基础.

根据AppDomain的纪录片(以及我自己的经验)你不能在ApplicationBase之外设置PrivateBinPath,如果我在应用程序所在的驱动器之外设置ApplicationBase(通过AppDomainSetup),我得到System.IO.FileNotFoundException抱怨它不能找到应用程序本身.

因此我甚至无法达到可以使用AssemblyResolve ResolveEventHandler尝试使用MarhsalByRefObject继承类来获取程序集的阶段...

这里有一些与我目前正在尝试的代码相关的代码片段

    internal class RemoteDomain : MarshalByRefObject
    {
        public override object InitializeLifetimeService() //there's apparently an error for marshalbyref objects where they get removed after a while without this
        {
            return null;
        }
        public Assembly GetAssembly(byte[] assembly)
        {
            try
            {
                return Assembly.Load(assembly);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return null;
        }
        public Assembly GetAssembly(string filepath)
        {
            try
            {
                return Assembly.LoadFrom(filepath);
            }
            catch …
Run Code Online (Sandbox Code Playgroud)

c# appdomain marshalbyrefobject .net-assembly

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

T4 Assembly指令找不到指定的文件

无论使用何种方法在程序集指令中指定文件,T4引擎都找不到指定的文件.

<#@ assembly name="$(SolutionDir)packages\TestPackage\lib\net45\Test.dll"#>
Run Code Online (Sandbox Code Playgroud)

或<#@ assembly name ="C:\ Test.dll"#>

或任何其他方法导致相同的未找到问题.模板引擎似乎能够读取文件并显示其版本信息,即使它找不到它.

Errors were generated when initializing the transformation object. The transformation will not be run. The following Exception was thrown:
System.IO.FileNotFoundException: Could not load file or assembly ‘Test, Version=1.0.1.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

表明缺少依赖性.程序集没有依赖关系.

为什么T4引擎找不到我的组件?

.net t4 .net-assembly visual-studio

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

找不到Visual Studio页面检查器程序集

我有一个ASP MVC项目,我没有,但我需要将其上传到IIS服务器上.这有效,但当我上传并访问该网站时,我收到此错误:

Could not load file or assembly 'Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

一切都在本地工作,但不在服务器上.我尝试过的事情:

  • 修复.NET Framework
  • 尝试从.NET Framework webconfig(位于:C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Config)文件中删除2行但不能因为文件正在使用中.由于Access Denied错误导致无法停止进程

我发现删除这两行可能是一个解决方案,但我不能删除它们:

<remove assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?任何帮助深表感谢!谢谢

.net c# asp.net-mvc .net-assembly page-inspector

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

如何以编程方式获取所有.NET程序集的列表?

我有一个应用程序在运行时编写动态程序集,所以我需要一个包含我的系统中所有程序集的列表,如Visual Studio Reference Manager:

参考经理

我的问题是:如何通过自己的语言获取所有.NET程序集的列表,.NET而无需搜索文件夹文件?

注意:
我知道我可以找到以下任何组件:
C:\Windows\assembly\GAC\...
或者
C:\Windows\Microsoft.NET\Framework
我不确定通过这种方式在所有系统中找到组件!
因为我无法访问所有计算机上的这些文件夹.所以我的应用程序只能通过.NET代码获取这些程序集的名称.而其他问题是所有计算机上此文件夹的路径都不固定,可能会有所不同.

.net c# .net-assembly .net-4.5

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

无法与Microsoft.AspNet.WebApi.Client一起加载文件或程序集'Newtonsoft.Json,Version = 6.0.0.0

我正在编写一个类库(称为mylibrary.dll),它本身引用了更多的库 - >使用以下DLL(从package.config获取版本概述):

<package id="EntityFramework" version="6.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
  <package id="Newtonsoft.Json" version="8.0.2" targetFramework="net45" />
  <package id="System.Data.SQLite" version="1.0.99.0" targetFramework="net45" />
  <package id="System.Data.SQLite.Core" version="1.0.99.0" targetFramework="net45" />
  <package id="System.Data.SQLite.EF6" version="1.0.99.0" targetFramework="net45" />
  <package id="System.Data.SQLite.Linq" version="1.0.99.0" targetFramework="net45" />
  <package id="UnmanagedExports" version="1.2.7" targetFramework="net45" />`
Run Code Online (Sandbox Code Playgroud)

mylibrary.dll是一个包装器,它将一些托管代码公开给需要非托管代码的调用者(换句话说,预期本机DLL条目的位置).

如果我通过NUnit测试方法测试mylibrary.dll的公共接口,则根本没有错误.但是,如果我通过targetapplication.exe的相同界面调用相同的方法,我会认识到以下情况:

  • 测试方法A:调用一个简单的JSON来进行字符串操作(使用Newtonsoft.JSON库)并运行得很好.
  • 测试方法B:调用执行PostAsync的方法

var vResponseObject = await vResponse.Content.ReadAsAsync <ApiResponse <T >>().ConfigureAwait(false);

在幕后,ReadAsAsync调用使用Newtonsoft.JSON反序列化类型的对象<T>.看来这个函数是生成错误的函数:

无法加载文件或程序集'Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = ...........'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

HTTPContent.ReadAsAsync由Microsoft.AspNet.WebApi.Client(扩展System.Net.Http)提供,它本身依赖于Newtonsoft.JSON版本6.0.x(请参阅此程序包的NuGet依赖项).未安装版本6.0.x,而是安装版本8.0.x. 因此需要在app.config中管理的可装配重定向:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
 </dependentAssembly> …
Run Code Online (Sandbox Code Playgroud)

c# dll reference json.net .net-assembly

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

什么是"<Module>"类型?

我正在使用Mono.Cecil来读取生成的程序集Regex.CompileToAssembly().当我遍历类型时,根命名空间中有一个名为的类型<Module>.该类型没有基本类型.这是什么类型的?这是一些Mono.Cecil工件还是实际上是.NET程序集的一部分?它起什么作用?

.net cil .net-assembly mono.cecil

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

MSSQL加载程序集错误

我在运行使用MSSSQL中的程序集的函数时收到以下错误:

消息10314,级别16,状态11,第36行尝试加载程序集ID 65800时,Microsoft .NET Framework中发生错误。服务器可能资源不足,或者PERMISSION_SET = EXTERNAL_ACCESS或UNSAFE可能不信任该程序集。再次运行查询,或查看文档以查看如何解决程序集信任问题。有关此错误的更多信息:System.IO.FileLoadException:无法加载文件或程序集“ exporttoexcel,Version = 0.76.0.0,Culture = neutral,PublicKeyToken = f73371c9a1809a3f”或其依赖项之一。来自HRESULT的异常:0x80FC80F1 System.IO.FileLoadException:位于System.Reflection.Assembly._nLoad(AssemblyName文件名,字符串codeBase,证据AssemblySecurity,程序集locationHint,StackCrawlMark&stackMark,布尔throwOnFileNotFound,

但是,在我重新创建函数和程序集之后,在一段时间内一切正常:

DROP FUNCTION [dbo].[fnExportToExcel]
DROP ASSEMBLY ExcelExporter

CREATE ASSEMBLY ExcelExporter  
AUTHORIZATION [DOMAIN\ACCOUNT]
FROM 'ExportToExcel.dll'
WITH PERMISSION_SET = UNSAFE

CREATE FUNCTION [dbo].[fnExportToExcel](@Query [nvarchar](max), @FilePath [nvarchar](max), @FileName [nvarchar](max), @SheetNames [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME ExcelExporter.[ExportToExcel_DLL.cls_ExcelExport].[ExportToExcel]
GO
Run Code Online (Sandbox Code Playgroud)

有什么想法可能导致MSSQL丢失程序集引用吗?

sql-server .net-assembly

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