标签: .net-assembly

嵌入式资源文件在运行时不存在 .Net 4

我有一个需要在运行时访问的文件,我已将其包含在我的项目中并将其设置为嵌入式资源(它实际上是一个源文件,我将扩展名更改为 .cs.txt 以绕过 VS 尝试编译它.这应该不重要,但我无论如何都会提到它以防万一)。当我尝试获取文件时

var assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream(resourceName);
Run Code Online (Sandbox Code Playgroud)

我得到一个空值。我已确保使用 Namespace.Folder.Filename 表示法,但这没有帮助。看来该文件实际上不存在,因为当我打电话时

assembly.GetManifestResourceNames();
Run Code Online (Sandbox Code Playgroud)

我得到一个空字符串数组。知道会发生什么情况吗?

c# embedded-resource .net-assembly

3
推荐指数
1
解决办法
5244
查看次数

在运行时动态更改对 dll 的引用

我遇到的情况是,不同的文件夹中有多个 .dll 文件,它们都具有相同的名称,包含相同的函数(具有相同的名称),但具有相同名称的函数内部的代码不同。

我在设计中创建了我的应用程序,引用了这些 .dll 文件之一。但我希望当我的应用程序启动时,使用选择案例能够更改对这些 dll 之一的引用。

这可能吗 ?

谢谢 !

c# dll assemblies system.reflection .net-assembly

3
推荐指数
1
解决办法
6418
查看次数

Microsoft.Ajax.Utilities dll:缺少程序集,在哪里下载?

这可能真的很明显,但我已经花了整整两个小时试图找到这个 dll。在哪里可以找到包含与 Microsoft.Ajax.Utilities 相关的所有内容的库?我继承了某人的代码,这是一个传奇。任何帮助深表感谢!

-F

ajax dll reference .net-assembly libraries

3
推荐指数
1
解决办法
6885
查看次数

使用 C# 使用 Assembly GetManifestResourceStream 方法读取资源文件

我在项目的根文件夹下有一个证书。项目名称是 SingleSignOn,但我无法使用 GetManifestResourceStream 内置方法读取该方法。

源代码是

namespace SingleSignOn
{
    public class Program
    {
        static void Main(string[] args)
         {
            var assembly = typeof(Program).Assembly;
            var super = assembly.GetManifestResourceNames();
            using (var stream = assembly.GetManifestResourceStream("SingleSignOn.idsrv3test.pfx"))
            {

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方案资源管理器的快照 在此输入图像描述

NULL我从上述内置方法中得到GetManifestResourceStream

在此输入图像描述

我不知道我在这件事上错过了什么。所述证书的URL是https://github.com/IdentityServer/IdentityServer3.Samples/blob/master/source/Certificates/idsrv3test.pfx

请帮助我如何阅读证书。

.net c# ssl resources .net-assembly

3
推荐指数
1
解决办法
5583
查看次数

C#:Type.GetType 在动态加载的程序集的类上为 null

这是我关于堆栈溢出的第一个问题。我试图寻找一种解决方案,但在任何地方都找不到一个或类似的解决方案。

我有一个 MVC 网站项目,它有不同的 DLL(插件),由于这些 DLL 不需要部署在所有环境中,所以我从文件夹中的 Global.asax 中的 Application_Start 上动态加载它们,并仅部署每个环境所需的内容。所以我不知道在项目中引用它们,这样我就可以为所有人构建一个版本。

我的问题是 Type.GetType("FullClassName, AssemblyName") 总是在这些插件中的对象上返回 null。

在 Application_Start 上,我基本上加载一个程序集,将其注册到 GAC,将其加载到当前 AppDomain 中,初始化其元数据并使用反射运行其引导程序,以在全局 Unity 容器中注册组件。

foreach (string file in fileList) {
    string fileName = (Path.GetFileName(file));
    Assembly asm = Assembly.LoadFrom(file);

    foreach (Type assemblyType in asm.GetTypes()) {
        new System.EnterpriseServices.Internal.Publish().GacInstall(file);
        AppDomain.CurrentDomain.Load(asm.GetName());
        MetaDataHelper.InitialiseMetadataForAssembly(asm);
        IBootstrapper bootsrapper = (IBootstrapper)Activator.CreateInstance(assemblyType, container);
        bootsrapper.Initialise();                                    
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过这种方法,对我的程序集进行强命名并将它们添加到 web.config 中,但没有效果。

<dependentAssembly>
    <assemblyIdentity name="MyAssembly"  culture="neutral" publicKeyToken="123456789"/>
        <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
    </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗我错过了什么吗?

提前致谢。

c# types appdomain gettype .net-assembly

3
推荐指数
1
解决办法
1121
查看次数

将 C# 类库引用添加到 VB.Net 项目

我有一个 VB.Net Windows 窗体应用程序。我已将 C# 类库添加到具有 VB.Net Windows 窗体应用程序的解决方案中。我编译了 C# 类库,并添加了对 VB.Net Windows 窗体应用程序的引用。但是,当我尝试添加 C# 类库的命名空间时,它并没有显示在智能感知中。因此我无法访问 C# 类及其函数。有人请告诉我解决这个问题的方法。谢谢

c# vb.net .net-assembly

3
推荐指数
1
解决办法
1689
查看次数

有没有办法查看 DynamicMethod 生成的 x86 汇编代码?

我正在构建一个动态方法,使用 ILGenerator 插入操作码。我正在使用 Visual Studio 插件查看 DynamicMethod 中的 IL 代码,因此这不是问题。

不过,我希望看到 JITer 发出的最终 x86 代码。无论我如何尝试,Visual Studio 2017 都不会让我进入 x86 汇编代码。它在堆栈中显示为“轻量级函数”,VS 将直接跳过它。

有没有办法查看编译 DynamicMethod 生成的 x86 汇编代码?

.net c# cil .net-assembly

3
推荐指数
1
解决办法
575
查看次数

在 C# 中将产品版本和文件版本设置为不同的数字

在 C++ 项目中,我可以使用版本资源文件中的VERSIONINFO将不同的产品版本和文件版本值添加到程序集中:

#define VER_PRODUCTVERSION          1,0,0,0
#define VER_PRODUCTVERSION_STR      "1.0\0"

#define VER_FILEVERSION             1,0,0,1
#define VER_FILEVERSION_STR         "1.0.0.1\0"
Run Code Online (Sandbox Code Playgroud)

这在 DLL 属性中显示为:

cpp-详细信息

我在 C# 项目中无法实现相同的目标。我在 AssemblyInfo.cs 文件中设置了以下内容:

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.0.1")]
Run Code Online (Sandbox Code Playgroud)

但是,在 DLL 属性中,两者都设置为“文件版本”的值:

cs-详细信息

如何在 C# DLL 中将产品版本和文件版本设置为不同的值?我正在使用 Visual Studio 2019。

c# .net-assembly visual-studio visual-studio-2019

3
推荐指数
1
解决办法
2258
查看次数

如何将可为空的对象引用分配给不可为空的变量?

我正在使用 VS2019 并在项目设置中启用了可为空检查语义。我正在尝试使用程序集获取可执行文件的路径,如下所示:

        var assembly = Assembly.GetEntryAssembly();
        if (assembly == null)
        {
            throw new Exception("cannot find exe assembly");
        }
        var location = new Uri(assembly.GetName().CodeBase);//doesn't compile.
Run Code Online (Sandbox Code Playgroud)

它说,“assembly”是一个 [Assembly?] 类型,而 Uri ctor 需要一个字符串,编译错误是:

error CS8602: Dereference of a possibly null reference.
Run Code Online (Sandbox Code Playgroud)

如何修复我的代码以使其编译?非常感谢。

c# .net-assembly c#-8.0 nullable-reference-types

3
推荐指数
2
解决办法
893
查看次数

将程序集加载到新的AppDomain以进行静态类/方法调用时出现问题

我通过C#执行.NET程序集时遇到了一些重大问题.我想从静态类调用静态方法(Main).我让它在当前域中工作,但显然我无法从那里卸载程序集.

首先,我尝试创建一个新的AppDomain:

AppDomain domain = AppDomain.CreateDomain("PluginDomain");
Run Code Online (Sandbox Code Playgroud)

由于我的主要问题是解析我正在尝试加载的程序集,我试图挂钩AssemblyResolve事件:

domain.AssemblyResolve += new ResolveEventHandler(this.OnAssemblyResolve);
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个关于序列化的错误(即这个类).

我已成功加载一个汇编文件,它恰好位于BaseDirectory中,只需使用:

domain.Load("Assembly1");
Run Code Online (Sandbox Code Playgroud)

但有问题的程序集位于BaseDirectory的两个子目录中,即.BaseDirectory\dir1\dir2\Assembly2.dll - 当使用带有字符串程序集名称的domain.Load()(将PrivateBinPath安装到正确的子目录位置)时以及使用带有程序集字节的domain.Load()时,我得到FileNotFoundException (来自File.ReadAllBytes()).

我知道AppDomain.Load()已被删除,但它似乎是唯一可用的方法,考虑到我不想强制包含静态方法的类是非静态和可实例化的.

无论如何,我该怎么做才能确保汇编文件正确加载到新的AppDomain中?

我的主要目标是从程序集中动态执行一个方法,该方法可以调用我自己的程序,但必要时也必须完全卸载程序集.它的目的是成为一个插件系统.

.net c# appdomain assembly-resolution .net-assembly

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