标签: assemblies

如何在C#中检索程序集的版本?

我有一个类型的引用,我想要检索它所在的程序集的版本号.

做这个的最好方式是什么?

.net assemblies

8
推荐指数
1
解决办法
410
查看次数

StructureMap和扫描组件

所以,我有一个使用StructureMap的.NET解决方案,我想让StructureMap读取一个外部程序集,该程序集实现该解决方案中项目的接口并为其定义注册表项.

我的解决方案的StructreMap配置:

ObjectFactory.Initialize(registry =>
{
  registry.Scan(assembly =>
   {
     assembly.TheCallingAssembly();

     //Telling StructureMap to sweep a folder called "extensions" directly
     //underneath the application root folder for any assemblies found in that folder
     assembly.AssembliesFromPath("extensions", addedAssembly => addedAssembly.GetName().Name.ToLower().Contains("extension"));

     //Direct StructureMap to add any Registries that it finds in these assemblies, assuming that all the StructureMap directives are
     //contained in registry classes
     assembly.LookForRegistries();
   });
});
Run Code Online (Sandbox Code Playgroud)

非常简单,我告诉它将调用程序集和程序集从目录添加到程序集集合中.我调试了程序集变量,它确实找到了所有程序集(包括扩展目录中的程序集).

在我创建的DLL项目中,我独立于原始解决方案,我有一个接口的实现(我从原始解决方案中引用了interfaces项目),并编写了一个非常简单的注册表:

public class ProductMockRegistry : Registry
{
    public ProductMockRegistry()
    {
        ForRequestedType<IProductRepository>().AddInstances(repository =>
        {
            repository.OfConcreteType<ProductMockRepository>();
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,StructureMap没有在外部DLL中找到注册表.它发现DLL很好,但是当我告诉LookForRegistries时,它找不到它.

structuremap registry assemblies

8
推荐指数
1
解决办法
9938
查看次数

为什么在尝试Assembly.ReflectionOnlyLoad时没有执行ReflectionOnlyAssemblyResolve?

我正在尝试通过挂钩AppDomain.AssemblyResolveAppDomain.ReflectionOnlyAssemblyResolve事件来加载一些模块.虽然我让前者工作,但我对后者失败了.我把问题归结为这个小程序:

public static class AssemblyLoader
{
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += 
            ReflectionOnlyAssemblyResolve;

        // fails with FileNotFoundException
        Assembly.ReflectionOnlyLoad("Foo");
    }

    public static Assembly ReflectionOnlyAssemblyResolve(object sender, 
        ResolveEventArgs args)
    {
        Trace.TraceInformation(
            "Failed resolving Assembly {0} for reflection", args.Name);

        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此程序失败,FileNotFoundException尝试时Assembly.ReflectionOnlyLoad,但它不会调用ReflectionOnlyAssemblyResolve处理程序.我很难过.

有没有人知道这可能是什么原因以及如何让它发挥作用?

谢谢!

.net c# clr assemblies assembly.reflectiononly

8
推荐指数
1
解决办法
7954
查看次数

行家组装-插件

我正在尝试将类路径添加到由maven-assembly-plugin生成的jar中.组件bulid,除了manifest没有类路径.以下是我的配置.任何帮助,将不胜感激.谢谢!

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>assembly</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <descriptors>
      <descriptor>assembly/package.xml</descriptor>
    </descriptors>
    <archive>
      <manifest>
        <mainClass>mymain.Main</mainClass>
        <addClasspath>true</addClasspath>
      </manifest>
    </archive>
  </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

maven-2 assemblies manifest

8
推荐指数
1
解决办法
8710
查看次数

未使用的装配参考的成本是多少?

我想知道在.NET解决方案中引用程序集的各种成本是多少.我对技术和组织成本感兴趣.

一些例子:

  • 未使用的程序集包含额外的字节(更长的下载量,浪费的空间)
  • 未使用的程序集可能包含可利用的安全漏洞
  • 未使用的组件可能会产生额外的启动成本
  • 未使用的组件可能会产生额外的审查费用(如此问题)
  • 未使用的程序集可能会混淆新开发人员

.net performance assemblies reference

8
推荐指数
1
解决办法
1003
查看次数

依赖性检查

有没有办法检查是否满足.Net程序集所需的所有依赖项?它位于生产服务器上,并且未安装Visual Studio.

它是一个.Net程序集,需要一些GAC:ed组件,这些组件不包含在安装包中.

.net dependencies assemblies

8
推荐指数
1
解决办法
2657
查看次数

如何检查某个组件是否存在?

我正在使用Activator基于程序集的短名称来实例化一个新类(例如'CustomModule').它抛出一个FileNotFoundException,因为装配不在那里.有没有办法检查是否存在某个程序集名称?

我正在使用以下代码:

System.Runtime.Remoting.ObjectHandle obj = 
    System.Activator.CreateInstance(assemblyName, className);
Run Code Online (Sandbox Code Playgroud)

主要目标是测试组件的存在而不是等待异常发生.

c# reflection assemblies activator c#-2.0

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

在引用调用程序集的运行时加载程序集

我的应用程序加载位于其执行路径中的所有库程序集,并对包含的类执行预先知道的方法.

我现在需要对引用我的应用程序集的程序集执行相同的操作.这是可能的吗?我应该注意哪些负面影响?

大师集会:

public abstract class TaskBase 
{ 
    public abstract void DoWork(); 
}  

LoadAssemblyFromFile("Assembly0001.dll");  
Assembly0001.Task1.DoWork();  
Run Code Online (Sandbox Code Playgroud)

儿童大会:

public sealed class Task1: MasterAssembly.TaskBase  
{ 
    public override void DoWork { /* whatever */ } 
}
Run Code Online (Sandbox Code Playgroud)

c# assemblies runtime reference

8
推荐指数
1
解决办法
962
查看次数

创建自定义AppDomain并向其添加程序集

如何创建appdomain,向其添加程序集,然后销毁该app域?这是我尝试过的:

    static void Main(string[] args)
    {           
        string pathToExe = @"A:\Users\Tono\Desktop\ConsoleApplication1.exe";

        AppDomain myDomain = AppDomain.CreateDomain("MyDomain");

        Assembly a = Assembly.Load(System.IO.File.ReadAllBytes(pathToExe));

        myDomain.Load(a.FullName); // Crashes here!            
    }
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

myDomain.Load(File.ReadAllBytes(pathToExe)); 
Run Code Online (Sandbox Code Playgroud)

如何将程序集添加到appdomain.一旦我这样做,我可以通过反射找到方法执行它,然后销毁appdomain

我得到的例外是:

无法加载文件或程序集"ConsoleApplication1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"或其依赖项之一.该系统找不到指定的文件.

c# reflection assemblies appdomain

8
推荐指数
1
解决办法
7808
查看次数

ASP.NET MVC尝试加载旧版本的Owin程序集

作为一个上下文,我正在开发一个ASP.NET MVC 5应用程序,该应用程序通过Microsoft的OWIN实现使用基于OAuth的身份验证,仅在此阶段用于Facebook和Google.目前(截至v3.0.0,git-commit 4932c2f),FacebookAuthenticationOptions并且GoogleOAuth2AuthenticationOptions没有提供任何属性来强制Facebook或Google分别在登录时重新验证用户(通过附加相应的查询字符串参数).

最初,我开始重写以下类:

  • FacebookAuthenticationOptions
  • GoogleOAuth2AuthenticationOptions
  • FacebookAuthenticationHandler(具体AuthenticateCoreAsync())
  • GoogleOAuth2AuthenticationHandler(具体AuthenticateCoreAsync())

但发现这些~AuthenticationHandler类被标记为internal.

所以我为Katana项目提取了一份源代码(http://katanaproject.codeplex.com/)并相应地修改了源代码.

编译之后,我发现有几个依赖项需要更新才能在MVC项目中使用这些更新的程序集(Microsoft.Owin.Security.FacebookMicrosoft.Owin.Security.Google):

  • Microsoft.Owin
  • Microsoft.Owin.Security
  • Microsoft.Owin.Security.Cookies
  • Microsoft.Owin.Security.OAuth
  • Microsoft.Owin.Host.SystemWeb

这是通过将现有项目引用替换为3.0.0版本并在web.config中更新它们来完成的.好消息:该项目编制成功.

在调试中,我在启动时收到异常:

[MVC web assembly] .dll中出现'System.IO.FileLoadException'类型的异常,但未在用户代码中处理

附加信息:无法加载文件或程序集"Microsoft.Owin.Security,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

基本的异常表明Microsoft.AspNet.Identity.Owin试图加载的V2.1.0 Microsoft.Owin.Security打电话时app.UseExternalSignInCookie()Startup.ConfigureAuth(IAppBuilder app)在Startup.Auth.cs.

不幸的是,程序集(及其它依赖项,Microsoft.AspNet.Identity.Owin)不是Project Katana解决方案的一部分,我无法在线找到这些程序集的任何可访问存储库.

Microsoft.AspNet.Identity程序集是否开源,如Katana项目?有没有办法欺骗这些程序集使用引用的v3.0.0程序集而不是v2.1.0?该/bin文件夹包含Owin程序集的3.0.0版本.

我已经为Microsoft.AspNet.Identity.Owin升级了NuGet包,这仍然是一个问题.

有关如何解决此问题的任何想法?

.net assemblies owin asp.net-mvc-5 asp.net-identity

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