标签: .net-assembly

哪里可以找到装配配置信息?

在AssemblyInfo.cs文件中我有以下子句:

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
Run Code Online (Sandbox Code Playgroud)

在组装完成后可以看到这些信息?由于文件细节中没有任何内容:

在此输入图像描述

还能在哪里找到它?

问候

.net assemblyinfo .net-assembly

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

Assembly.GetTypes()返回类型的顺序是什么?

如果我在AppDomain中获得类型列表,这些类型是否有固有的排序?

List<Type> myTypes = new List<Type>();
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
    myTypes.AddRange(a.GetTypes());
Run Code Online (Sandbox Code Playgroud)

这似乎产生了一个命名空间中的类型分组的列表,但我看不到命名空间组本身的模式(或每个命名空间组中的类型).

c# reflection types .net-assembly

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

通过提供类名作为字符串来获取引用程序集的类型?

这些类似的问题:操作方法:使用Silverlight中的字符串加载从引用的程序集在运行时类型,在引用的程序集的GetType上一类失败,但是没有答案的作品.

我有一个MVC项目,它从包含普通类型作为字符串的数据库中提取数据.这些类型位于引用的程序集中,而不是MVC项目中.

因此,例如,假设我的Referenced Assembly Name是MyFramework普通类型名称Car,完整类型名称可以是MyFramework.Cars.Car或者MyFramework.Vehicles.Cars.Car或其他一些变体.我只有引用的程序集名称和普通的类名称作为字符串.无论完整的类型名称如何,我如何获得类型?

最后,我可以在引用的程序集中编写一个函数来调用GetType()并在MvC项目中使用它,这样我可以放弃包括程序集名称吗?我想删除已知的程序集名称,所以我想我可以在引用的程序集中编写一个Util,如:

namespace MyFramework //the referenced assembly
{
  public static class TypeUtil
  {
    public static Type GetFrameworkType(string typeName)
    {
        return Type.GetType(typeName);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的MVC项目中,我可以调用它而不需要将程序集作为字符串名称.这可能还是我总是需要汇编名称?

.net c# reflection gettype .net-assembly

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

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

使用星号时导致Assembly Version递增的原因是什么?

如果我有一个汇编版本,例如:

[assembly: AssemblyVersion("2013.7.18.*")]
Run Code Online (Sandbox Code Playgroud)

当读取此版本号时,它将是类似的2013.7.18.123.

是什么导致最终数字的增量?

.net c# assemblyversions .net-assembly

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

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);
Run Code Online (Sandbox Code Playgroud)

这里要注意的一个重要部分是我使用程序集的"短"名称而不是"完整"名称(包括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 Partial)WRN:为程序集提供了部分绑定信息:

警告:程序集名称:SquidReports.DataCollector.Plugin.BES | 域ID:1

警告:仅提供部分程序集显示名称时发生部分绑定.

警告:这可能导致装订器装入错误的装配.

警告:建议为程序集提供完全指定的文本标识,

警告:它由简单的名称,版本,文化和公钥令牌组成.

警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270.

...但它以成功加载结束,它清楚地提到我的装配在正确的位置:

日志:尝试下载新的URL文件:/// C:/Source/C#/SquidReports/SquidReports.DataCollector/bin/x86/Debug/SquidReports.DataCollector.Plugin.BES.DLL.

长命名版本的日志不包含可疑消息.

还有什么想法吗?

编辑:这是Action类的最小定义.它纯粹是一个模型类.

public class Action : ICollectible
{
    public Action()
    {
        // Empty constructor …
Run Code Online (Sandbox Code Playgroud)

c# reflection assembly-loading .net-assembly

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

没有基址寄存器,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万
查看次数

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

包参考版本中的歧义

在一个项目中有几个对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
查看次数

"在WPF上找不到IPlatformOperations.这绝不会发生,你的依赖解析器会被破坏"

我正在编写一个程序,它是其他较小程序的容器.它通过Assembly.Load加载它的模块,找到实现IModule的类型并创建它们的实例.

在WPF MainWindow中,我有一个RoutedViewHost,它将显示所有内容.

在我的AppBoostrapper中,我有以下内容:

     private ReactiveList<IModule> LoadModules(IMutableDependencyResolver resolver)
        {
            var modules = ModuleLoader.Load(ModulesDirectory);
//                        var modules = new IModule[] { new SampleModuleClass(), }; // this works perftectly!

            foreach (var module in modules)
            {
                try
                {
                    module.RegisterDependencies(this, resolver);
                }
                catch (Exception e)
                {
                    Log.Error(e, "Could not register dependecies for module " + module.Name);
                }
            }

            Log.Debug("Modules loaded: " + string.Join(", ", modules.Select(x => x.Name)));
            return new ReactiveList<IModule>(modules);
        }
Run Code Online (Sandbox Code Playgroud)

然后,在我的示例模块中:

  public void RegisterDependencies(IMainScreen screen, IMutableDependencyResolver resolver)
        {
            _screen = screen;
            _resolver = …
Run Code Online (Sandbox Code Playgroud)

c# wpf .net-assembly reactiveui mahapps.metro

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