【问题标题】:Project cannot see inside a dll项目在 dll 中看不到
【发布时间】:2015-06-24 20:00:24
【问题描述】:

这是我到目前为止所做的:

  1. 到这里下载源代码:http://oggsharp.codeplex.com/SourceControl/latest#OggSharp/CsVorbis。它以“oggsharp-19c0361a8fa8.zip”的形式出现,其中包含我想要的所有 .cs 文件的 OggSharp\CsVorbis。

  2. 在 MS VS 2010 中启动了一个新的类库项目。添加了该文件夹 (CsVorbis) 中的所有 .cs 文件。

  3. 编译项目。这样就生成了一个 CsVorbisDll.dll 文件。

  4. 转到我的另一个项目——MonoGame DirectX 项目——并添加了对该 dll 的引用。

  5. 添加了using CsVorbisDll;,这部分有效。所以它可以看到dll。 (编辑:之前打错了。是using CsVorbisDll;

  6. 尝试使用该 dll 中的类,例如 OggDecoder,但这不起作用!它说“找不到类型或命名空间名称 'OggDecoder'” p>

显然我的项目可以看到 dll,但看不到 dll。我不确定为什么。 OggDecoder 类是公开的。然而,我注意到 dll 的大小只有 4 KB,而源代码文件夹大约是 300 KB。编译不正确吗?

我在编译 dll 时将配置设置为“发布”,而不是“调试”。我的 MonoGame 项目也在 MS VS 2010 中,使用 DirectX,其他方面运行良好。

编辑:到目前为止我已经验证的内容:两个项目都针对“.NET Framework 4”(不是客户端配置文件)。这两个项目都有平台目标“x86”。

有人可以帮我正确设置这个 dll 吗?我真的希望它是一个dll。源代码中的 *.cs 太多,无法将它们全部添加到我的 MonoGame 项目中。

编辑:我找到了答案并将其发布。基本上,我必须使项目名称与所有 .cs 文件的命名空间相同,以便 dll 文件名也与命名空间相同。

【问题讨论】:

  • 两个项目编译在同一个.NET版本下?
  • “添加了“使用CsVorbisDll.dll;”,这部分工作。”。您应该了解程序集引用和 using 指令之间的区别。
  • @Jonesy 是的,两者都在项目属性中设置了“目标框架:.NET Framework 4”。
  • @LucasTrzesniewski 抱歉,我之前打错了。它是“使用 CsVorbisDll;”最后没有.dll。我应该为 dll 文件选择一个更好的名称。
  • 您检查项目是否处于不同的 32 位构建模式?

标签: c# visual-studio-2010 dll


【解决方案1】:

如果你想深入了解 dll,你可以试试.Net Reflector

您可以安装免费试用版,试用期约为 60 天。它会在 Visual Studio 中安装一个新菜单。

【讨论】:

  • 或者使用免费开源的ilspy
  • 当人们在 2015 年仍然推荐 Reflector 时,我感到很困惑,尤其是在争议之后......只需使用更好(而且免费)的 dotPeek,或者集成反编译器的 ReSharper。
  • 我正在考虑购买 ReSharper。你个人用过吗?值得吗?
【解决方案2】:

除非您还更改了所有命名空间,否则您使用的语句是不正确的。应该是:

using OggSharp;

【讨论】:

  • 我没有更改 OggSharp 或 CsVorbis 的源代码中的任何内容。它使用的命名空间确实是“OggSharp”。但是,“使用 OggSharp;”在我的 MonoGame 项目中给出了一个错误。它看不到它。但它可以看到CsVorbisDll。我也不明白。
【解决方案3】:

我知道出了什么问题,但还是不喜欢。

我正在编译的 .cs 文件都有namespace Oggsharp。所以一时兴起,我创建了一个新的类库项目并将其命名为 OggSharp(而不是之前的 CsVorbisDll)。这次它编译成一个 84 KB 的 dll。我引用了它并且能够使用它的所有类和函数!

我最初的怀疑是正确的,因为 CsVorbisDll.dll 被编译为一个可怜的 4 KB dll 文件。所以我猜它没有把东西编译进去是因为命名空间与 dll 名称不匹配?

在调用 OggSharp 项目并制作 OggSharp.dll 后,它被编译成一个 84 KB 的 dll,它的所有内部都可以使用。

不确定我是否喜欢这个约定/规则。我可能会做一些实验,例如,手动重命名 dll 并查看会发生什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多