要使.NET程序集允许除完全受信任的调用者以外的任何其他内容,必须使用AllowPartiallyTrustedCallers对程序集进行签名和归属.
但即使有了这个,CLR仍然(幸运的是)检查代码权限以确保部分信任的调用者可以执行所需的代码.
所以我的问题是,为什么不为所有程序集假定AllowPartiallyTrustedCallers属性?为什么不相反,那些真正不想要部分信任的呼叫者的人必须使用像DenyPartiallyTrustedCallers这样的属性?
假设程序集Assembly1.dll包含3个类:C1,C2,C3类.
我想只将C1级暴露给外界.无法访问C2和C3类.如何实现这一目标?
注意:将类C2和C3设为私有不是一个选项,因为这将使它们在程序集本身内无法访问.
我有一个应用程序,它在文件系统和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) 非常简单的Winforms应用程序我想手动部署.是否所有引用的程序集都可以放在应用程序文件夹中,或者它们应该在何处发布?(在ASP.NET中,它们可以放在\ bin文件夹中).我宁愿不加入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的重点是什么?或许我错过了什么?也许我应该手动将程序集复制到我的本地文件夹中?但我听说这也很难.
对于应用程序,我需要检查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知道在需要它之前需要组装.这是真的?我该如何改变这种行为?
提前致谢.
我有旧的代码,源丢失(但我们拥有它)所以我使用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)
这是什么意思?
我有一个方法是对程序集的所有类进行一些工作:
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上的所有成员然后循环所有类型并测试它们是否(当前命名空间中的字符串比较),但我真的觉得它不是要走的路......
任何帮助将非常感激 !
我把MSVCR100D.DLL放到c:\ windows\system32文件夹中,但依赖者walker仍在抱怨它丢失了.有任何想法吗?
测试平台在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软件中断.
可能吗?如果是这样,这个问题上有什么工具吗?
谢谢!
assemblies ×10
c# ×5
.net ×3
asp.net ×1
assembly ×1
c ×1
c++ ×1
compilation ×1
gac ×1
loader ×1
namespaces ×1
oop ×1
publishing ×1
reflection ×1
winforms ×1