标签: assemblies

为什么AllowPartiallyTrustedCallers不是默认值?

要使.NET程序集允许除完全受信任的调用者以外的任何其他内容,必须使用AllowPartiallyTrustedCallers对程序集进行签名和归属.

但即使有了这个,CLR仍然(幸运的是)检查代码权限以确保部分信任的调用者可以执行所需的代码.

所以我的问题是,为什么不为所有程序集假定AllowPartiallyTrustedCallers属性?为什么不相反,那些真正不想要部分信任的呼叫者的人必须使用像DenyPartiallyTrustedCallers这样的属性?

.net assemblies

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

如何只从程序集中公开一个特定的类?

假设程序集Assembly1.dll包含3个类:C1,C2,C3类.

我想只将C1级暴露给外界.无法访问C2和C3类.如何实现这一目标?

注意:将类C2和C3设为私有不是一个选项,因为这将使它们在程序集本身内无法访问.

c# oop assemblies

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

C#:为什么我的应用程序没有关闭其文件句柄?

我有一个应用程序,它在文件系统和GAC中打开一系列DLL,并锁定这些文件.如何显式释放这些句柄,以便我可以在Visual Studio中重建它们而无需关闭我的应用程序?

代码如下:

private void BuildTabPage_AssemblyTree(string filename, string foldername)
{
    Assembly assembly;
    try
    {
    assembly = Assembly.LoadFrom(filename);
    }
    catch (Exception ex) 
    {
    MessageBox.Show("Error loading assembly " + filename + "\n" + ex.Message);
    return;
    }
    TreeNode tRoot = BuildNode(assembly, foldername);
    tvAssemblies.Nodes.Add(tRoot);
    tvAssemblies.ExpandAll();

    txtResults.Text =
    RefsFound.ToString() + " References Located in Filesystem\r\n" +
    RefsInFramework.ToString() + " References Located in Framework\r\n" +
    RefsInGac.ToString() + " References Located in GAC\r\n" +
    RefsNotFound.ToString() + " References Not Found: \r\n\r\n";
    foreach (string s in MissingFiles)
    txtResults.Text …
Run Code Online (Sandbox Code Playgroud)

c# reflection assemblies

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

Winforms:应该发布与应用程序一起使用的程序集

非常简单的Winforms应用程序我想手动部署.是否所有引用的程序集都可以放在应用程序文件夹中,或者它们应该在何处发布?(在ASP.NET中,它们可以放在\ bin文件夹中).我宁愿不加入GAC.

assemblies publishing winforms

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

使用全局程序集缓存(GAC) - 以其设计的方式

以下解决方案是否是在代码中使用GAC库的唯一可能性?

Assembly lib = Assembly.Load("MyLibrary, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31f5625abd53197f");

Console.WriteLine(lib.GetType("MyClass").GetMethod("Start").Invoke(obj, null));
Run Code Online (Sandbox Code Playgroud)

我有点困惑 - 我已经阅读了很多关于GAC的内容,我知道如何在GAC中签署程序集,安装和卸载程序集,但不知道如何使用它,以及它如何帮助程序员(除了它安全地存储相同库的不同版本).我希望我能正常创建类,而不是被迫调用上面提到的方法.

我不想要任何解决方法,例如:"更改Windows注册表",因为我不认为GAC是为这种操作而设计的.我想要一个简单的答案:GAC的用途是什么,运行时环境是否以某种方式使用它?

当代码变得非常丑陋且难以管理时,使用GAC的重点是什么?或许我错过了什么?也许我应该手动将程序集复制到我的本地文件夹中?但我听说这也很难.

.net c# assemblies gac

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

当.Net加载程序集以及如何更改此行为时?

对于应用程序,我需要检查Crystal Reports运行时库的可用性.我试过的是:

    void CheckCrystal()
    {
        try
        {
            CrystalDecisions.Windows.Forms.CrystalReportViewer test = new CrystalDecisions.Windows.Forms.CrystalReportViewer();
            test.Dispose();
        }
        catch (System.Exception)
        {
            PTrace.Error("Some dependences needed to run Crystal Reports are not available.");
            throw;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为在调用方法之前调用CheckCrystal的方法中会抛出有关缺少的Crystal依赖项的File.IOException.就像.Net知道在需要它之前需要组装.这是真的?我该如何改变这种行为?

提前致谢.

.net assemblies loader

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

C#程序集中的SQL程序集错误

我有旧的代码,源丢失(但我们拥有它)所以我使用reflector.net解压缩它.

现在当我编译它时,我得到了这个:

 Error  1   The type 'System.ComponentModel.Component' is defined in an assembly that is not referenced. You must add a reference to assembly 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.  C:\NCESTableGenerator\NCESTableGenerator\db\OutputTableDAO.cs   27  20  NCESTableGenerator
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

c# asp.net assemblies sql-server-2005 compilation

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

在程序集的命名空间内循环?

我有一个方法是对程序集的所有类进行一些工作:

var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();

foreach (Type type in types)
{
    [...]
}
Run Code Online (Sandbox Code Playgroud)

问题是,现在,我想为我的程序集的每个命名空间拆分代码!就像是

var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();

foreach (/*namespace in my assembly*/)
{
    foreach (Type type /*in my Namespace*/)
    {
        [...]
    }
}
Run Code Online (Sandbox Code Playgroud)

但毕竟我在网上的研究和在这里我没有找到任何我喜欢的东西......我唯一能做的就是:

List<string> namespaceList = new List<string>();

foreach (Type type in types)
{
    if (!namespaceList.Contains(type.Namespace))
    {
        namespaceList.Add(type.Namespace);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我无法对此List做任何事情...是的,我可以循环遍历namespaceList上的所有成员然后循环所有类型并测试它们是否(当前命名空间中的字符串比较),但我真的觉得它不是要走的路......

任何帮助将非常感激 !

c# assemblies namespaces

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

MSVCR100D.DLL和依赖性walker

我把MSVCR100D.DLL放到c:\ windows\system32文件夹中,但依赖者walker仍在抱怨它丢失了.有任何想法吗?

c++ assemblies visual-studio-2010 .net-assembly

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

是否可以在Linux上没有链接libc的情况下将C转换为asm?

测试平台在Linux 32位上.(但也欢迎Windows 32位上的某些解决方案)

这是交响代码段:

int a = 0;
printf("%d\n", a);
Run Code Online (Sandbox Code Playgroud)

如果我使用gcc生成汇编代码

gcc -S test.c
Run Code Online (Sandbox Code Playgroud)

然后我会得到:

      movl    $0, 28(%esp)
      movl    28(%esp), %eax
      movl    %eax, 4(%esp)
      movl    $.LC0, (%esp)
      call    printf
      leave
      ret
Run Code Online (Sandbox Code Playgroud)

而这个汇编代码需要链接到libc才能工作(因为调用printf)

我的问题是:

是否可以将C转换为asm,只使用显式使用系统调用,而不使用libc?

像这样:

    pop ecx        
    add ecx,host_msg-host_reloc
    mov eax,4
    mov ebx,1
     mov edx,host_msg_len
    int 80h
    mov eax,1
     xor ebx,ebx
     int 80h
Run Code Online (Sandbox Code Playgroud)

直接调用int 80h软件中断.

可能吗?如果是这样,这个问题上有什么工具吗?

谢谢!

c compiler-construction assembly assemblies

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