标签: assemblies

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

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

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

这可能吗 ?

谢谢 !

c# dll assemblies system.reflection .net-assembly

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

通过COM可见DLL从VB6调用.NET方法

我创建了一个.NET DLL,它使一些方法COM可见.

一种方法是有问题的.它看起来像这样:

bool Foo(byte[] a, ref byte[] b, string c, ref string d)
Run Code Online (Sandbox Code Playgroud)

当我尝试调用该方法时,VB6给出了编译错误:

标记为受限制的函数或接口,或者该函数使用Visual Basic中不支持的自动化类型.

我读过数组参数必须通过引用传递,所以我改变了签名中的第一个参数:

bool Foo(ref byte[] a, ref byte[] b, string c, ref string d)
Run Code Online (Sandbox Code Playgroud)

VB6仍然提供相同的编译错误.

如何更改签名以与VB6兼容?

.net arrays vb6 com assemblies

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

.NET程序集引用编译时错误

我有程序集A和类Z,它继承自程序集B中的类X.现在在一个完全不同的解决方案中,我有程序集C,它使用类Z.

除非程序集C具有对程序集A和B的引用,否则编译器会抱怨.尽管程序集C仍然不直接使用类Z.

这是预期的吗?

在我看来,如果程序集B在运行时丢失,那么东西会爆炸,但在编译时它应该不在乎.

我在这里错过了什么?

我的目标是我可以告诉我的客户端依赖于程序集A中的类Z,但是我可以在另一端完全重新配置我的程序集,并且在升级时对客户端完全没有影响.

.net assemblies reference

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

在"沙箱环境"中从.Net应用程序加载程序集

目前正在开发一个应用程序,用户将动态选择dll,应用程序将执行该dll中的一些方法.(如果您按照第一个链接,您将看到我正在使用.Net Framework 开发一种Robocode游戏应用程序).

例如,当战斗开始时,run执行来自dll 的方法.

由于将执行run方法中指定的任何内容,因此必须应用相当多的安全约束.

例如,如果编程dll的用户,而不是仅使用适用于接口的方法(机器人用于行走和触发的方法等等),则调用将检索文件甚至删除的方法来自硬盘的文件...当另一个用户将该dll加载到他的计算机中时,这些方法将在他的电脑上调用,他的文件将被这个恶意代码修改.

因此,我需要以某种方式使这个应用程序从一种沙盒环境运行,以便无论调用什么方法,它都不会影响打开dll的计算机的硬盘.

关于如何开始这样做的任何想法?

这是一个关于如何加载这些dll并调用其方法的示例:

for (int i = 0; i < robotList.Count; i++)
{
    IRunnable o = robotList[i];
    new Thread(delegate()
    {
        o.run();    
    }).Start();
}
Run Code Online (Sandbox Code Playgroud)

.net assemblies sandbox

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

使用相同组件的不同版本

我有一个项目,我同时必须使用ActiveReports 2和ActiveReports 6中内置的报告.总的来说,它工作正常,但一些帮助程序集使用相同的名称.例如,为了能够导出为PDF,两个版本都使用名为ActiveReports.PdfExport.dll的程序集.当然,相应的组件是不同的.

请注意,我不直接访问ActiveReports.PdfExport.dll - 这是由ActiveReports运行时处理的.

我找不到将它们都包含在项目中的方法.有办法吗?GAC是答案吗?

c# activereports assemblies gac reference

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

单个x86构建的程序集导致整个程序集以32位执行

我的程序(控制台应用程序)引用了其他几个程序集(许多开源库).我使用"Any CPU"选项集(使用VS2008)构建了程序集.当我从Windows Server 2008 x64计算机上的64位命令提示符启动程序集时,该过程始终以32位进程启动!

我查看了我的引用,看起来好像我有一个引用的32位程序集的引用.这个单引用会导致整个程序集以32位开始吗?

此外,我使用ILMerge将所有引用的程序集合并到一个程序集中.也许这与它有关?

有人可以帮我弄清楚这里发生了什么吗?

.net c# assemblies 32bit-64bit

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

除了一个集会外,我怎样才能隐藏"setter"?

我的另一个问题中,我已经提到了这个问题,但我认为值得将其分解为自己的问题,因为它并不真正依赖于我提到的其他场景.

无论如何 - 在Q上,不知道这是否可能.寻找解决方案/解决方法.

我有一个类库,只有POCO:

MyCompany.MyProject.Domain.POCO
Run Code Online (Sandbox Code Playgroud)

这个程序集有一个这样的POCO:

public class Post
{
   public int PostId { get; set; }
   public int Name { get; set; }
      ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我有另一个类库,它是我的DAL/Repository,并使用Entity Framework 4.0进行持久化:

MyCompany.MyProject.Repositories
Run Code Online (Sandbox Code Playgroud)

这个程序集引用了POCO项目,因为它需要在POCO上执行CRUD操作(抓取DB对象,项目进入POCO,返回,以及修改POCO).

现在,我还有一个Web应用程序,它同时引用了POCO和Repository程序集.

如果我这样做:

somePOCO.PostId = 10;
Run Code Online (Sandbox Code Playgroud)

我得到一个SQLException,因为PostId是数据库中的IDENTITY字段,因此不应该明确设置.

有没有办法可以隐藏这些特殊属性的setter,以便只有存储库可以访问setter?

我想不出用常规辅助功能修饰符来做到这一点的方法(因为它们都不适合这种情况),你们能想到一个解决方法吗?

.net c# assemblies access-modifiers getter-setter

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

C#从字节运行

我正在努力让我的客户端通过下载字节并使用反射打开它来打开另一个程序.我目前在C#控制台应用程序上工作,但是当我尝试在Windows窗体应用程序上执行此操作时,我收到此错误.

"调用的目标引发了异常."

这是代码

using System;
using System.IO;
using System.Net;
using System.Reflection;
using System.Text;
    private void listBox1_DoubleClick(object sender, EventArgs e)
    {
        if (listBox1.SelectedItem.ToString() != null)
        {
            if (MessageBox.Show("Run " + listBox1.SelectedItem.ToString() + "?", "Run this program?", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                byte[] bytes;
                using (WebClient client = new WebClient())
                {
                    bytes = client.DownloadData(new Uri("http://example.net/program.exe"));
                }
                RunFromBytes(bytes);
            }
        }
    }
    private static void RunFromBytes(byte[] bytes)
    {
        Assembly exeAssembly = Assembly.Load(bytes);
        exeAssembly.EntryPoint.Invoke(null, null);
    }
Run Code Online (Sandbox Code Playgroud)

.net c# reflection byte assemblies

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

.Net 4.0中的点汇编参考,似乎无法找到它

我无法在.Net 4.0中找到点结构的正确装配参考.

API参考在这里.

但是System.Windows在解决方案资源管理器的参考列表中不存在.

我知道我本可以自己创建一个简单的点结构,但我想用它来防止其他程序集遇到这个问题.=)

.net c# wpf assemblies

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

是还是不是?我可以在不同的程序集中划分接口和实现类吗?

我是编程新手,但我正在尽力学习!

我有一个应用程序,我必须将IView注入我的ViewModel.这意味着IView接口应该位于ViewModel程序集中,而不是View View中,或者我打破MVVM规则,从VM添加引用到View程序集.

所以我的问题是:在两个不同的程序集中划分接口和实现类是否荒谬,或者这是正确的方法吗?

非常感谢你们!

c# vb.net assemblies interface class

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