【问题标题】:Scope Modifiers范围修饰符
【发布时间】:2011-03-15 14:17:46
【问题描述】:

我有 2 个项目:

  1. 一个包含我的类库 类/业务逻辑
  2. 一个 WPF 使用该类的应用程序 库 (DLL)

我被赋予了隐藏所有类库函数和类的任务,以便外部应用程序无法调用或使用它。

我的问题是 WPF 应用程序是“外部应用程序”。

我将所有类和属性的所有公共范围修饰符更改为 Friend。

然后我尝试将这两个项目合并到一个解决方案中……这当然行不通。 在包含这两个项目的解决方案中,我还尝试更改类库的“程序集”以匹配 WPF(因为“朋友”允许同一程序集中的代码使用它)......但这也不起作用。

有谁知道实现这个的方法吗?

谢谢

-弗林尼

【问题讨论】:

  • 我没想过要搜索“限制对 .NET 程序集的访问”......请注意,这个问题开始变得越来越大,因为我有更多关于 InternalsVisibleTo 属性的信息,而且有关 CAS(等)的更多信息。

标签: .net visual-studio-2010 scope


【解决方案1】:

如果它们是不同的程序集,则没有直接的方法可以做到这一点。 InternalsVisibleToAttribute 可以让你有点厚颜无耻,但这有点 hacky。

坦率地说,除非您走极端,否则您无法阻止外部代码调用您的方法。恶意应用可以通过任何修饰符,如果他们愿意的话(因为应用调用你可能拥有AppDomain,它可以断言完整-相信)。对基于调用者的安全/权限有一些支持,但是 regular 的东西在很大程度上被“完全信任”禁用了——你需要自己检查调用者。不值得,海事组织。特别是因为从 4.0 开始不再使用代码访问权限(请参阅MSDN

【讨论】:

  • 您发布的链接使我进入了 CAS 的巨大话题。我现在正在查看 .NET 4 Framework 中的安全更改 (bit.ly/a4Hchz)。在 .NET 4 中,他们改变了一些东西并删除了一些方法,但该功能仍然存在。我不明白的是策略和运行时要求将如何阻止人们在他们的项目中添加对我的 DLL 的引用并查看所有类及其成员......?对不起我的无知(我对此很陌生),但你能澄清一下你在说什么吗?
  • 我认为结合使用 InternalsVisibleTo 属性和 CAS(在某种程度上)是我正在寻找的。感谢@Marc Gravell 指出一些我不会考虑的有价值的信息。
【解决方案2】:

使用InternalsVisibleTo 属性。

【讨论】:

  • 感谢您的快速回复!我现在正在查看文档:) :)
  • 快速问题:如何找到我的应用程序的公钥?在文章的底部,建议使用 Sn.exe 实用程序...然后如果您浏览链接,您会被告知使用 Visual Studio 的命令行工具...但即使我安装了 VS2010,我也没有有 Visual Studio 命令行工具...
  • 这确实应该是一个新问题,但是Visual Studio的命令行工具只不过是程序组“Microsoft Visual Studio \Visual Studio Tools”中的“Visual Studio Command Prompt”跨度>
  • @Frinavale:该链接的目标是%comspec% /k ""C:\Programme\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86
  • @Frinavale,您是否使用密钥签署了您的应用程序?如果没有,那么您不需要提供公钥部分,只需提供名称即可。
【解决方案3】:

您应该能够设置 InternalsVisibleTo attribute 以便 WPF 应用程序可以看到内部类,这将允许它仍然可以看到它们,但其他应用程序将无法看到。

一些帮助here

如前所述,这仅适用于最简单的情况。人们仍然可以根据需要使用反射调用您的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多