标签: .net-assembly

程序集中的类列表

我有一个DLL程序集,其中有各种类.每个班级有大约50-100名成员和4-5个职能.如何使用VB.NET程序创建所有类及其各自成员的列表?

我需要向用户显示使用特定类执行操作.

.net vb.net reflection .net-assembly

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

.NET相当于静态库?

我正在托管代码(主要是C++/CLI)中构建一个工具,有两个版本,一个是"普通用户"版本,另一个是"专业版".

核心代码在两个版本之间是相同的这一事实导致我有点麻烦,因为我想将生成的工具打包为单个程序集(DLL),我不希望必须包含公共的.cpp文件两个版本工具的项目中的代码.我宁愿有一个公共代码的项目和每个工具版本的项目,并且每个版本的工具项目都依赖于公共代码并根据需要链接它.

在非托管C++中,我通过将公共代码放在静态库中并将工具的两个版本链接到它来实现这一点.我似乎无法在C++/CLI中使用它.似乎我被迫将公共代码构建到DLL程序集中,这导致了比我想要的更多的DLL.

因此,总而言之,我无法弄清楚如何在一个项目中构建公共代码并将其与每个最终产品项目链接以生成两个包含公共代码的单个DLL程序集.

我可能做错了什么,但我试图用netmodules和其他方法来解决这个问题,但是我无法让它工作.最后,我让它工作的唯一方法是告诉链接器链接公共代码程序集的构建产品而不是有效的结果但是有点像黑客恕我直言.

无论如何,有没有人对我应该如何解决这个问题有任何建议?

编辑:我想我应该提到这样一个事实,即生成的程序集不是100%托管代码,它们包含托管代码和非托管代码的混合,可能在使用C++/CLI生成的程序集中很常见...

.net c# assemblies static-libraries .net-assembly

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

使用CodeDomProvider编译到内存时,程序集找不到引用的程序集

我正在尝试使用CodeDomProvider在运行时将一些代码编译到内存中.

我正在编译的代码引用了一个外部程序集,我在编译代码时使用的参数中包含了该代码.

当我编译到内存并尝试对Visual Studio加载项中生成的程序集使用反射时,它会抛出一个异常,说它无法找到引用的程序集.

(例外)
"无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息."

(LoaderException)
"{"无法加载文件或程序集'Dynamo.Jiss.Task,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.系统找不到指定的文件.":"Dynamo.Jiss.Task,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"}"

我尝试使用绝对路径从不同的地方引用程序集.

如果从控制台应用程序运行,完全相同的代码工作正常,如果我不编译到内存,它也可以在加载项中正常工作.
删除对外部程序集的引用以及引用它的代码在编译到内存时也有效,因此异常描述可能是加载引用程序集时出现的问题.

有没有人知道为什么编译内存和引用程序集不能在加载项中工作?

它正在运行的AppDomain中是否存在某些限制或我应该注意哪些内容?(我目前最好的猜测)

它应该在特定文件夹中吗?使用相对路径引用?安全设定?需要签名吗?有任何想法吗?


我想要实现的是一种方法,将具有特定扩展名的文件放在项目中,让addin自动编译它,如果它实现了ITask接口(来自外部程序集),它将调用一个Setup()方法来实现它代码可以在侦听不同事件时挂钩到Visual Studio事件并执行任务/脚本.这样,如果更改了另一个文件,我可以轻松执行文本模板,或者在不同事件(文档保存,构建等)上组合和缩小文件.

这样的事情是否已经存在(为了减轻我的痛苦)?:)

.net add-in codedom compilation .net-assembly

5
推荐指数
1
解决办法
4056
查看次数

在类库中实例化Castle Windsor容器时的最佳做法是什么?

我想知道实例化温莎城堡容器的最佳位置在一个类库中.

我应该只在我正在使用的类的构造函数中执行它,还是有一个我不知道的程序集入口点?

谢谢.

c# castle-windsor castle inversion-of-control .net-assembly

5
推荐指数
2
解决办法
1516
查看次数

确定是否引用了类C#

我很好奇是否可以确定大会是否引用了某个特定的类.我目前正在使用Reflection来加载Assemblies,然后我确定正在加载的程序集中引用了哪些程序集:

foreach (var vReferencedAssembly in vSomeAssembly.GetReferencedAssemblies())
Run Code Online (Sandbox Code Playgroud)

现在我知道引用了哪些程序集,我想深入研究那些vReferencedAssembly,并确定是否会出现这样的情况:

File.Create(vSomeFile);
Run Code Online (Sandbox Code Playgroud)

用简单的英语,我不想从提供给我的列表中加载一个可能包含我认为是威胁的程序集.所以我可能想要阻止可能操纵文件的东西等等.

c# reflection .net-assembly

5
推荐指数
1
解决办法
208
查看次数

AppDomain卸载后程序集没有卸载?

我正在使用AppDomain来加载程序集然后卸载它们.

但是,我有一个非常严重的问题.在卸载AppDomain之后 - 我仍然可以在进程资源管理器中看到一些程序集被多次加载!为什么有装载组件的剩余部分?AppDomain.Unload不会释放所有AppDomain加载的内存吗?

您可以在附件中看到:

AppDomains总数为3(我在流程的生命周期中创建了3个AppDomain)

AppDomains:1(目前只存在1个AppDomain)

由于某种原因,正如您在加载的DLL部分中看到的那样 - 程序集被多次加载到流程中.

码:

AppDomain fetcherDomain = AppDomain.CreateDomain("StatusFetcher");
try
{
    var fetcher = (LocalStatusFetcher)fetcherDomain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().CodeBase, typeof(LocalStatusFetcher).FullName);
    //doing some other stuff that is not interesting...
}
finally
{
    AppDomain.Unload(fetcherDomain);
}
Run Code Online (Sandbox Code Playgroud)

是的,LocalStatusFetcher确实继承了MarshalByRefObject ......

在此输入图像描述

.net appdomain .net-assembly

5
推荐指数
1
解决办法
1511
查看次数

什么是参考资料及其目的?

我正在Nutshell中阅读C#5.0中的 WinRT(Windows运行时),我在.NET开发中找到了一些基本术语:参考汇编和参考配置文件.所以,我对上一个术语表示怀疑:什么是参考资料及其目的?

另外,我粘贴描述.NET Framework库和WinRT库之间重叠的整个段落(我认为这描述了创建引用配置文件的需要):

WinRT库支持新的Metro用户界面(用于编写沉浸式触摸优先应用程序),特定于移动设备的功能(传感器,文本消息等),以及与.NET Framework部分重叠的一系列核心功能.由于这种重叠,Visual Studio包含一个用于Metro项目的引用配置文件(一组.NET引用程序集),它隐藏了与WinRT重叠的.NET Framework部分.此配置文件还隐藏了.NET Framework的大部分内容,这些内容被认为是平板电脑应用程序不必要的(例如访问数据库).Microsoft的应用程序商店控制软件向消费者设备的分发,拒绝任何试图访问隐藏类型的程序.

.net .net-assembly

5
推荐指数
0
解决办法
160
查看次数

从DLL动态加载WPF视图和视图模型

我有一个在WPF中创建的向导,由页面作为UserControl对象组成.我要做的是从.DLL文件加载包含以下内容的插件:

  • 插件逻辑的代码文件.
  • 一个XAML用户控件,它将显示主插件中显示的插件的配置选项.
  • 用户控件的视图模型.

我已经能够成功加载并实例化UserControl对象以及视图模型,并且我已经到达控件出现在其自己的向导页面中的阶段.(这可能是正确实例化的视图模型,因为我在视图模型中设置了向导页面的标题,并且一切正常)

我得到的问题是UserControl我从DLL加载我没有正确显示.它不是显示UserControl内容,而是显示实际用户控件所在MyDLL.MyCustomUserControl行的明文x:Class="MyDLL.MyCustomUserControl".

我从DLL加载的用户控件的内容是:

<UserControl x:Class="MyDLL.MyCustomUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
    <Label Content="This is the Plugin Options Page" />
    <TextBox Text="{Binding Path=PluginStringText}" />
</StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

该属性PluginStringText存在于视图模型中User Control.

我有一种感觉,我需要以某种方式将视图模型分配或绑定到用户控件后从DLL加载它.作为我的向导的一部分,有一个部分我定义数据模板(这是另一个包含向导页面的UserControl),但我不知道如何在运行时实际添加额外的模板.我有一种感觉,这是导致这个问题.

通过搜索许多主题可以看出我可能通过视图的代码隐藏文件来做到这一点,但是我无法在第一时间获取对视图代码的引用来调用方法.有没有办法从View的View Model类中添加新的DataTemplate条目?

<UserControl.Resources>

    <DataTemplate DataType="{x:Type viewModel:ExistingPage1ViewModel}">
        <view:ExistingPage1View />
    </DataTemplate>

    <DataTemplate DataType="{x:Type viewModel:ExistingPage2ViewModel}">
        <view:ExistingPage2View />
    </DataTemplate>
<...>
Run Code Online (Sandbox Code Playgroud)

如果有人能指出我正确的方向,请提前感谢

.net c# wpf user-controls .net-assembly

5
推荐指数
1
解决办法
2593
查看次数

MVC 4项目中缺少'DotNetOpenAuth.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 2780ccd10d57b246'

我已经下载了项目,这是微软网站上提供的Pluralsight MVC 4免费教程视频的效果:http://www.asp.net/mvc/videos/pluralsight-building-applications-with-aspnet-mvc-4

链接到项目:http://www.speedyshare.com/GGTrM/odetofoodmvc4-7c20f071ef3b.zip

我已经创建了MVC音乐商店应用程序,它运行正常.这个项目显然是正确的,从Visual Studio 2013运行后,我给出了这样的信息:

System.IO.FileNotFoundException: Cannot load file 'DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246' 
Run Code Online (Sandbox Code Playgroud)

堆:

[FileNotFoundException: Nie mo?na za?adowa? pliku lub zestawu 'DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246' lub jednej z jego zale?no?ci. Nie mo?na odnale?? okre?lonego pliku.]
   Microsoft.Web.WebPages.OAuth.PreApplicationStartCode.Start() +0

[InvalidOperationException: Metoda Start w typie Microsoft.Web.WebPages.OAuth.PreApplicationStartCode, wywo?ywana na etapie inicjalizacji przed uruchomieniem aplikacji, zg?osi?a wyj?tek; komunikat o b??dzie: Nie mo?na za?adowa? pliku lub zestawu 'DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246' lub jednej z jego zale?no?ci. Nie mo?na …
Run Code Online (Sandbox Code Playgroud)

.net filenotfoundexception .net-assembly asp.net-mvc-4

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

BadImageFormatException无法加载文件或程序集或其依赖项之一。试图加载格式错误的程序

我的控制台应用程序(VS2012)引用了“ dcasdk.dll”,因此出现运行时错误。控制台应用程序的.Net Framework为4.5,平台目标为“任何CPU”。

Could not load file or assembly 'dcasdk, Version=1.0.1.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Run Code Online (Sandbox Code Playgroud)

我使用CorFlags应用程序检查dll的目标平台。下面是详细信息。

Version : v4.0.30319
CLR Header : 2.5
PE : PE32
CorFlags : 16
ILONLY : 0
32BIT : 0
Signed : 0
Run Code Online (Sandbox Code Playgroud)

根据以上信息,我认为该dll也使用“任何CPU”目标构建。因此,它应与具有相同目标平台的控制台应用程序一起使用。我不确定为什么我跑步时会收到此错误。

我还尝试将目标平台更改为x86,从而提供以下“ FileNotFoundException”。我在反射器中检查了dll的引用。它仅显示System.Xml和System.Data。哪些已添加为控制台应用程序中的参考。

Could not load file or assembly 'dcasdk.dll' or one of its dependencies. The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)

任何与此有关的帮助将不胜感激。

提前致谢。

下面是来自Fusion ..的Assembly Binding …

.net c# .net-assembly badimageformatexception target-platform

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