标签: .net-assembly

MEF从目录加载插件

我与MEF合作,我正在寻找如何通过MEF找到插件的另一种方式更改插件位置的URL,我想更改此行

Assembly.LoadFrom(@"C:\julia\project\project.Plugin.Nav\bin\Debug\NavPlugin.dll")));
Run Code Online (Sandbox Code Playgroud)

我想删除此URL,因为我需要在另一台机器上部署我的应用程序

这是我的功能:

public void AssembleCalculatorComponents()
{
   try
   {
       //var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
       //var container = new CompositionContainer(catalog);
       //container.ComposeParts(this);
       var catalog = new AggregateCatalog();

       catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(@"C:\yosra\project\project.Plugin.Nav\bin\Debug\NavPlugin.dll")));
       var container = new CompositionContainer(catalog);

       container.ComposeParts(this);
    }
    catch (Exception ex)
    {
       throw ex;
    }
 }
Run Code Online (Sandbox Code Playgroud)

你能帮我么?

谢谢

c# location mef .net-assembly

10
推荐指数
2
解决办法
2万
查看次数

动态装配在.Net 4.0中加载

我的问题始于将.Net 2.0应用程序移动到.Net 4.0.我必须这样做的原因是Windows 8默认情况下不启用早期的.Net版本,我的应用程序无法要求用户启用它.

该应用程序是一个NPAPI插件,它通过UnmanagedExports使用.Net组件.我将其设计为低完整性应用程序,因此它必须驻留在用户的LocalLow'目录中.

在我的应用程序中,我使用动态程序集加载机制在运行时加载多个程序集.我使用以下方法加载程序集,

MyInterface Instance;

Assembly assembly = Assembly.LoadFrom(AssemblyFile);
Type type = assembly.GetType(Identifier); // Identifier is implementing the MyInterface 
Instance = Activator.CreateInstance(type) as MyInterface;

// Do something with the Instance
Run Code Online (Sandbox Code Playgroud)

将项目修改为.Net 4.0之后,我注意到当二进制文件放在LocalLow目录中时插件崩溃(它在其他地方工作).我的下一步是创建一个简约插件,用尽可能少的代码来找出问题.我注意到动态程序集加载失败,出现以下异常,

System.IO.FileLoadException: Could not load file or assembly '<assemblyPath>' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515 (COR_E_NOTSUPPORTED)) --->

System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the …
Run Code Online (Sandbox Code Playgroud)

.net c# unmanaged .net-assembly dynamic-assemblies

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

无法加载文件或程序集,PublicKeyToken = null

无法加载文件或程序集'NCrawler.GeckoProcessor,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.

我打电话的时候 CrawlUsingGeckoProcessor.Run();

这是什么意思?我可以点击"转到定义",我可以看到Run()方法.

c# .net-assembly visual-studio

9
推荐指数
2
解决办法
8万
查看次数

加载此程序集将从其他实例生成不同的授权集

我在运行时遇到以下错误"从ASP.net 2.0网站调用vb.net 1.1程序集时,加载此程序集将从其他实例生成不同的授权集".知道这个错误背后的原因是什么?

场景是:

有一个Web应用程序在ASP.NET 2.0中构建为WebSite.这个网站上的网页加载了一个2.0 vb.net程序集,用于加载1.1 vb.net程序集.

在加载1.1 dll的程序集时,代码在运行时失败.请帮忙.

.net c# vb.net asp.net .net-assembly

9
推荐指数
1
解决办法
9474
查看次数

使用动态加载的 .Net 程序集进行二进制序列化

我将我的类的一个实例序列化为一个文件(带有BinaryFormatter

之后,在另一个项目中,我想反序列化这个文件,但没有成功,因为我的新项目没有我旧类的描述。在.Deserialize()收到一个异常

Unable to find assembly '*MyAssembly, Version=1.9.0.0, Culture=neutral, PublicKeyToken=null'.*".
Run Code Online (Sandbox Code Playgroud)

但是我有包含我想要反序列化的旧类的描述的程序集的 .DLL。

我不想在项目中添加对 this DLL 的引用(我希望能够反序列化任何类型程序集的类......)

如何通知序列化器/反序列化器使用我动态加载的程序集?

.net c# serialization .net-assembly

9
推荐指数
2
解决办法
1388
查看次数

没有基址寄存器,qword ptr [hexvalue]是什么意思

我在汇编中调试了CLR代码,并且排成一行

mov rax, qword ptr [ff4053c0h]
Run Code Online (Sandbox Code Playgroud)

我想qword ptr [ff4053c0h]是指我感兴趣的字符串,但ff4053c0h不是有效的内存位置.阅读qword ptr它似乎引用了一个基于基址寄存器的地址(例如qword ptr [rsp+30h],堆栈中有30个字节),但是我找不到没有基址寄存器的含义.

assembly .net-assembly

9
推荐指数
2
解决办法
1万
查看次数

什么是程序集绑定日志中的后策略引用?

试图理解这个程序集绑定失败 - 下面的日志中"后策略引用"的含义是什么?

LOG: This bind starts in default load context.
LOG: Using application configuration file: E:\approot\WorkerRole.dll.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from D:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Microsoft.WindowsAzure.Diagnostics, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///E:/approot/Microsoft.WindowsAzure.Diagnostics.DLL.
LOG: Assembly download was successful. Attempting setup of file: E:\approot\Microsoft.WindowsAzure.Diagnostics.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Microsoft.WindowsAzure.Diagnostics, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
WRN: Comparing the assembly name resulted in the mismatch: …
Run Code Online (Sandbox Code Playgroud)

.net .net-assembly fuslogvw

9
推荐指数
1
解决办法
2445
查看次数

是否可以在SQL Server 2014中为.NET框架程序集创建非对称密钥?

我正在Visual Studio中开发一个SQL Server数据库项目,它实际上是一个用户定义的函数.在这个项目中,我将Json.NET作为参考(使用NuGet).

我设法通过首先打开数据库TRUSTWORTHY ON(因为我的项目是UNSAFE)然后运行它来发布(并使工作)我的程序集和UDF到我的SQL Server实例:

CREATE ASSEMBLY [System.Runtime.Serialization] 
FROM 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Runtime.Serialization.dll'
WITH PERMISSION_SET = UNSAFE;
Run Code Online (Sandbox Code Playgroud)

原来是Json.NET所依赖的程序集(如果我不这样做,我会收到错误)

与此同时,我读到了TRUSTWORTHY ON可能变得多么糟糕,我试图采用非对称键方式来避免打开它.

甚至在签署我自己的程序集之前,我知道我必须创建一个密钥, System.Runtime.Serialization因为我的项目依赖于Json.Net,而Json.Net依赖于它,但是当我运行它时,我得到了这个:

USE [master];
GO
  CREATE ASYMMETRIC KEY [SystemRuntimeSerializationKey]
    AUTHORIZATION [dbo]
    FROM EXECUTABLE FILE = 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Runtime.Serialization.dll';
GO

Msg 15468, Level 16, State 5, Line 3
An error occurred during the generation of the asymmetric key.
Run Code Online (Sandbox Code Playgroud)

这对我没什么帮助.

那么是否可以为.NET框架程序集生成这样的密钥,或者它是否存在将TRUSTWORTHY打开的其他解决方法?

.net sql-server sqlclr database-project .net-assembly

9
推荐指数
1
解决办法
1102
查看次数

包参考版本中的歧义

在一个项目中有几个对Ninject库的引用,它们有自己的版本,单元测试失败,错误:

消息:System.IO.FileLoadException:无法加载文件或程序集'Ninject,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = c7192dc5380945e7'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(来自HRESULT的异常:0x80131040)---- System.IO.FileLoadException:无法加载文件或程序集'Ninject,Version = 3.2.0.0,Culture = neutral,PublicKeyToken = c7192dc5380945e7'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

1- csproj文件

<Reference Include="Ninject, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
  <HintPath>..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

2- packages.config

<package id="Ninject" version="3.2.2.0" targetFramework="net462" />
Run Code Online (Sandbox Code Playgroud)

3- app.config

<dependentAssembly>
    <assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

4-参考文件夹 - >展开 - >右键单击Ninject - >属性

Version: 3.2.0.0
Run Code Online (Sandbox Code Playgroud)

5-管理NuGet包 - >安装 - > 在此输入图像描述

看起来像我的项目中的某个地方引用了版本4.0.0.0和3.2.0.0我只想引用版本3.2.2.0.

怎么做?

这些参考文献之间有什么区别?

.net c# dll .net-assembly nuget

9
推荐指数
2
解决办法
5444
查看次数

如何知道我是在 .NET Framework 还是 .NET Core 下运行

假设我有一个 Nuget 库,它编译为netstandard2.0支持netcoreapp2.1net471.

现在,在编译时,我不知道我是否在net471netcoreapp2.1或下运行(我强调这一点是因为我不能将我的 dll 编译为 和netstandard2.0netstandard因为net471如果调用程序集netstandard2.0,我仍然不知道什么关于入口组件)。

我如何在运行时知道我正在运行哪个 TargetFramwork?


我知道有一个这样的解决方案:

Assembly.GetEntryAssembly()?
    .GetCustomAttribute<TargetFrameworkAttribute>()?
    .FrameworkName
Run Code Online (Sandbox Code Playgroud)

但是,如果您在 MSTest 和 中运行此net471命令Assembly.GetEntryAssembly() == null,那么我不想破坏使用我的 Nuget 的项目中的测试。

c# .net-assembly .net-core

9
推荐指数
1
解决办法
3329
查看次数