Tag: .net assembly

应该兼容的不兼容的.NET标准程序集?

我有一个.NET Standard 2.0 DLL项目。 除了NETStandard.Library 2.0.1之外,它没有其他参考,一切都很好。 它由WPF应用程序引用,一切似乎都可以正常工作。 将System.Collections.Immutable 1.5.0的nuget包添加到DLL项目后,解决方案资源管理器的Dependencies根目录上会出现一个黄色感叹号。 (嗯……我现在看到感叹号仍然存在,即使我删除了这个包,但我想这是一个VS错误,因为在添加此库之前一切似乎都运行正常) 拥有这两个包,一切都很好,但是当我尝试使用ImmutableDictionary ,我得到了这个: System.IO.FileNotFoundException:’无法加载文件或程序集’System.Collections.Immutable,Version = 1.2.3.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a’或其依赖项之一。 该系统找不到指定的文件。’ 看看nuget包,我知道这两个应该一起工作,因为(根据我的理解)’System.Collections.Immutable`库说它支持.NET标准2.0。 我是.NET标准世界的新手。 在我的主应用程序的bin文件夹中查看System.Collections.Immutable.dll公钥令牌,我发现它确实是b03f5f7f11d50a3a 。 但版本不同。 通常,在旧的.NET中,我会尝试在应用程序的配置文件中添加程序集重定向。 但在这里这样做似乎没有任何区别。 将此添加到我的引用DLL的WPF应用程序中: …将exception更改为: System.IO.FileNotFoundException:’无法加载文件或程序集’System.Collections.Immutable,Version = 4.0.11.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a’或其依赖项之一。 该系统找不到指定的文件。’ 内在例外 FileNotFoundException:无法加载文件或程序集’System.Collections.Immutable,Version = 1.2.3.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a’或其依赖项之一。 该系统找不到指定的文件。 这里发生了什么? 我不能一起使用这两个nuget包吗? 更新: 我现在注意到我得到的DLL版本来自System.Collections.Concurrent.dll ,而我对System.Collections.Immutable.dll感兴趣,这在我的bin文件夹中找不到…我甚至都没有找到nuget包存储在我的解决方案中的位置。 更新2: 事实certificate,当我创建具有类似设置的新解决方案(引用.NET Standard 2 […]

AssemblyTitle一旦设置就永远不会改变,我希望每个配置都改变它

我想根据产品名称更改下面屏幕截图中显示的文字。 我知道,该文本来自Assembly.Title属性,它是一个只读属性,因此无法在运行时更改。 那么如何在编译时更改它? 我们将应用程序出售给多个客户,应用程序的名称应根据客户进行更改。 我们为每位客户提供配置。 因此,在构建时,应根据配置选择程序集标题。 有什么建议怎么解决这个问题? 更新: 我尝试了评论中给出的一些建议,我发现如下: 使用项目属性中的程序集信息弹出窗口设置文本或直接在AssemblyInfo.cs文件中更改它后,它在任务栏中正确显示。 如果我再次更改它,更改的文本不会显示在任务栏中,即。 它始终显示第一次设置的文本。 我尝试删除文件,甚至重新启动系统,但它没有帮助。 然后我重命名了文件(即exe文件),然后它正确显示了更改的文本 。 如果我将其重命名为原始名称,则会显示第一个设置文本。 可能是什么原因?

如何在紧凑框架中从字节数组加载程序集

我有遗留客户使用智能扫描仪和旧手机。 结果,我不得不在这些智能设备的紧凑框架中开发。 我正在编写一个类库,它将为扫描仪硬件的接口提供插件类型机制。 我希望能够将来自扫描仪制造商的第三方程序集作为插件DLL中的嵌入式资源嵌入。 我想这样做是为了避免在我的插件系统试图找到插件接口的实现时必须反映所有第三方DLL。 漂亮的海峡前进。 问题是,使用嵌入式资源,我可以获得程序集的字节,但System.Reflection.Assembly.LoadAssembly(byte[])在紧凑框架中不可用。 只有LoadAssembly(AssemblyName)和LoadAssembly(String) 。 如何在运行时从嵌入式资源加载这些程序集? 这就是我现在拥有的: protected void LoadEmbeddedAssemblies() { Assembly asm = Assembly.GetCallingAssembly(); foreach (string resName in asm.GetManifestResourceNames()) { if (resName.EndsWith(“.dll”)) { try { //this is an embedded assembly using (Stream s = asm.GetManifestResourceStream(resName)) { if (s.Length > Int32.MaxValue) throw new IOException(“The assembly is to large”); byte[] bytes = […]

程序集中的类顺序

是什么决定了大会中class级的顺序? 并且……有没有办法改变它? 附加信息:您可以通过自己反思来检查订购,或者您可以使用ILDASM之类的工具,禁用字母排序,然后您也可以获得订单。 顺序似乎是由编译器决定的奇怪方式。 我已经尝试了一些东西……比如重命名类(顺序保持不变),还编辑.csproj文件来改变.cs文件的顺序。 我的主要关注点是VS2008,C#,。net 3.5。 更新:我确实有一个场景,订单很重要(外部程序通过reflection通过我的assembly) – 我需要特殊订单。 除此之外 – 你是完全正确的 – 订单真的不应该紧。

使绑定重定向适用于办公室加载项

我在我的Word插件中使用Microsoft.Bcl.Async,我的插件编译为exe(test_addin.exe)文件,从Microsoft Word作为程序集加载,当我直接启动可执行文件时,一切正常,但是当我从Word运行它时,我收到一个错误,说它无法加载Systems.Threading.Tasks程序集。 Could not load file or assembly System.Threading.Tasks… 看起来它与绑定重定向有关,当我尝试从Word运行应用程序时,它希望配置文件位于’C:\Program Files (x86)\Microsoft Office\Office15’文件夹中,并命名为WINWORD.exe.config ,遗憾的是不可能,因为我可能无权访问该文件夹。 我的test_addin.exe.config文件: 我已经尝试将AppDomain.CurrentDomain.SetupInformation.ConfigurationFile设置为指向正确的路径,但它似乎没有帮助,还有其他方法使其适用于Office加载项吗?

动态编译代码时发生IOException

我有以下代码行: CSharpCodeProvider c = new CSharpCodeProvider(); CompilerParameters cp = new CompilerParameters(); cp.ReferencedAssemblies.Add(“system.dll”); cp.CompilerOptions = “/t:library”; cp.GenerateInMemory = true; CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString()); 这会导致抛出IOException 。 附加信息:进程无法访问文件’C:\ Users \ Username \ AppData \ Local \ Temp \ _dgl5fb1i.err’,因为它正由另一个进程使用。 但是,这是耗费超过8GB RAM的大型程序的一部分。 在具有16GB RAM的系统上,不会抛出此exception。 动态编译的代码编译好并运行。 程序在具有足够RAM的系统上运行时没有任何错误。 该程序是为x64编译的。 请注意,我没有收到OutOfMemoryException或任何迹象表明程序内存不足。 在任务管理器中,内存使用率几乎在抛出IOException之前到达顶部。 什么可能导致这种行为,任何人都可以提出解决方案? 编辑 我修改了应用程序以使用更少的内存。 即使应用程序有足够的可用内存,错误仍然存​​在。 问题仍然只发生在一台机器上。 这可能与以下post有关: 阻止CompileAssemblyFromSource生成具有重复文件名的临时文件 。

‘无法加载文件或程序集’netstandard,Version = 2.0.0.0,…’。 不应加载引用程序集以执行

目标:从.NET 4.7控制台应用程序,使用Assembly.GetType()的reflection,我尝试从程序集X中提取netstandard 2.0类的类型。然后我想用Activator.CreateInstance()创建此类型的实例。 我想要做的是:但是,这个程序集X依赖于netstandard 2.0。 为了能够获取Type,必须将netstandard依赖项加载到AppDomain中。 这就是为什么当AppDomain通过AssemblyResolve事件请求netstandard程序集时,我只需加载这样的dll: var netStandardDllPath = @”C:\Users\xxx\.nuget\packages\NETStandard.Library.2.0.0-preview1-25301-01\build\netstandard2.0\ref\netstandard.dll”; return Assembly.LoadFrom(netStandardDllPath); 哪个投掷: System.BadImageFormatException:’无法加载文件或程序集’文件:/// C:\ Users \ vincent.lerouvillois.nuget \ packages \ NETStandard.Library.2.0.0-preview1-25301-01 \ build \ netstandard2.0 \ ref \ netstandard.dll’或其依赖项之一。 不应加载引用程序集以执行。 它们只能在Reflection-only loader上下文中加载。 (HRESULTexception:0x80131058)’ 内部exception:BadImageFormatException:无法加载引用程序集以执行。 我所知道的:我知道他们希望我们使用Assembly.ReflectionOnlyLoadFrom加载DLL。 但这样做会阻止我使用Activator.CreateInstance()实现类型。 请参阅Microsoft官方post 另外,我尝试在我的控制台应用程序中引用Nuget软件包NETStandard.Library 2.0.0-preview1-25301-01和NETStandard.Library.NETFramework 2.0.0-preview1-25305-02,这样它就会引用netstandard 2.0库,但是它没有改变任何东西。 问题:有没有人知道是否有正确的方法加载该DLL而没有错误,或者可能是否是一个bug,或者? 或者为什么这种DLL无法加载执行?

Activator.CreateInstance:无法从程序集加载类型

我正在尝试在我的项目中创建一个在插件.dll中实现的类的实例来进行类型发现。 我收到了这个例外: 无法从程序集’SquidReports.DataCollector.Plugin.BES,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null’加载类型’Action’。 这是我正在使用的确切方法签名: https : //msdn.microsoft.com/en-us/library/d133hta4(v = vs.110).aspx 换句话说,我试图根据程序集名称和类名生成对象,如下所示: object modelObject = Activator.CreateInstance((string)modelInfo.AssemblyName, (string)modelInfo.ModelName); 这里要注意的一个重要部分是我使用程序集的“短”名称而不是“完整”名称(包括Version,Culture和PublicToken)。 但是,MSDN明确指出: ‘assemblyName’可以是以下任一种:程序集的简单名称,没有其路径或文件扩展名。 例如,您可以为路径和名称为。\ bin \ TypeExtensions.dll的程序集指定TypeExtensions。 已签名程序集的全名,包括其简单名称,版本,区域性和公钥标记; 例如,“TypeExtensions,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 181869f2f7435b51”。 具体来说,我正在尝试创建一个在程序集’SquidReports.DataCollector.Plugin.BES’中定义的类’Action’的实例。 我明确地将此程序集引用为完全相同* .cs文件顶部的using指令,我正在尝试创建该实例。 我从之前的问题/答案中尝试了以下建议: 清理你的解决方案,重建并再试一次这似乎适用于一些ASP.NET项目,但这是一个简单的旧控制台应用程序。 检查配置文件中引用的程序集再次,这是一个简单的控制台应用程序,只在同一解决方案的不同项目中使用GAC和库 1.确保程序集位于正确的工作目录中: 我们到了… 2.确保程序集是磁盘上的相同版本 对… 3.最终的建议是使用fuslogvw.exe。 我没有使用该工具的经验,但有一件事我觉得很奇怪。 在运行调试会话时,我的程序集的长命名和短命名版本都出现了: 我看了看两个日志。 这个命名短的版本确实会产生一些警告: ===预绑定状态信息=== LOG:DisplayName = SquidReports.DataCollector.Plugin.BES […]

参考没有强名称的汇编

有没有办法引用没有强名称的库? 当我在引用中添加对程序集的引用并重建解决方案时,一切都很好,但是当我从这个程序集解决方案调用该类时,它不会构建。 输出表示引用的程序集应具有强名称。 什么是最好的解决方案? 强命名库不是首选。

在程序集中找不到上下文类型。 ASP.NET MVC4

在这里遵循这个教程(根据教程需要一个客户数据库而不是电影): http : //www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a -新场到了,电影模式和表 但是,当我尝试运行迁移命令时,会遇到以下错误:“在程序集’MvcVault’中找不到上下文类型’MvcCustomer.Models.CustomerDbContext’。” 这是我的客户模型: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; namespace MvcVault.Models { public class Customer { public int ID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime Born { get; set; } public int Telephone […]