【问题标题】:C# Creating a assembly for future referenceC# 创建程序集以供将来参考
【发布时间】:2009-12-11 18:45:21
【问题描述】:

我正在尝试重建 zlib.net 并创建一个我可以在 Visual Studio 中的未来项目中引用的程序集。

但是,在从提供的源代码构建并将生成的 zlib.net.dll 移动到 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies 之后,虽然我确实可以将 zlib.net 引用添加到新项目,但我无法访问底层对象。

我相信我在 zlib.net.dll 项目设置文件中遗漏了一些重要的配置,因此我可以生成一个可以在设计时被其他项目引用的程序集。我只是不确定是哪个。

你能帮忙吗?

更新:
请注意,我正在使用 zlib.net(上面的链接)自己提供的演示来测试生成的程序集。当我使用提供的 zlib.net.dll 时,一切正常。当我使用从源代码构建的那个时,它会失败。

【问题讨论】:

    标签: c# visual-studio assemblies


    【解决方案1】:

    您不应该永远需要向 PublicAssemblies 文件夹中添加一些东西。

    将程序集放在开发文件夹层次结构中的某个位置(可能是C:\dev\Reference\zlib.net\zlib.net.dll)。如果要添加引用,请单击浏览并在您的开发文件夹中找到程序集。然后单击解决方案资源管理器中的引用并打开“属性”窗格。确保 Copy Local 设置为 true。

    如果您的解决方案在源代码管理中,您需要将 DLL 复制到当前解决方案层次结构并从那里引用它 - 您不想强迫每个人都拥有一些特定的非源代码控制文件夹构建一个源代码控制项目。

    【讨论】:

    • 感谢您的提示。从现在开始,我会确保这样做(就像我刚才所做的那样)。但是您可能会怀疑这并没有解决问题。
    • 我永远不会想到它在此之后不起作用,因为从您上面发布的有限信息来看,这只是问题所在。您收到了哪些错误消息(您没有提及)?
    • 添加新的 zlib.net.dll 后,我收到“错误 1 ​​找不到类型或命名空间名称 'ZStream'(您是否缺少 using 指令或程序集引用?) ”。如果我使用提供的 dll 而不是从源代码构建的 dll,则不会发生这种情况
    • @Krugar:我刚刚做了以下操作,效果很好。 1) 下载 zlib.net 源码。 2)打开项目并构建。 3) 将输出 zlib.net.dll 复制到 C:\dev。 4)在我的项目中,添加参考>浏览>选择zlib.net.dll。 5)在我要使用ZStream的文件中,添加using ComponentAce.Compression.Libs.zlib; 6)工作正常。
    • 这次确实奏效了。我无法理解。也许我做了一些我不知道的改变。但是从一开始就重复一切,现在就可以了。谢谢。
    【解决方案2】:

    你是什么意思,你无法访问底层对象? 您的意思是您不能从您在该程序集中定义的类中实例化对象吗?

    如果是这样,您确定这些类是“公共的”(具有公共访问修饰符)吗? 当您添加新类时,VS.NET 可能不会在您的类定义中添加访问说明符,因此将使用默认访问说明符。 在这种情况下,这意味着使用了“内部”访问说明符。 (默认情况下,类是内部的)。 然后,这可以解释为什么您不能从这些类中实例化对象,因为“内部”类(或方法或其他)仅在声明它们的程序集中可见。

    解决方案:在您希望在该程序集之外“可见”的类上指定“公共”访问修饰符。

    【讨论】:

    • 相关课程确实是公开的,Frederik。除了在项目配置文件中将程序集的目标从 2.0 更改为 .Net 3.5 之外,我没有对源代码进行任何更改。
    • -1:我假设他所说的组件已经可以用于一般用途。他在询问将二进制文件放在哪里,以便多个项目可以引用它。
    【解决方案3】:

    Frederik 的建议是我要检查的第一件事。您不能访问在外部程序集中不公开的类或类成员。

    如果它们已经设置为公共,请确保您对要访问的类的命名空间有正确的 using 语句。因此,如果您想访问 ZLib.SomeNameSpace.Archive 类,请确保通过全名引用它,或者添加

    using ZLib.SomeNameSpace;
    

    首先到代码文件。然后你应该可以访问该类,例如:

    Archive myArchive = new Archive();
    

    【讨论】:

    • 我有适当的分配。我知道这一点是因为我实际上并没有为它编写代码,而是重用提供的演示项目,当我替换当前的 zlib.net 程序集参考时失败对于我刚刚建造的那个。 (更新我的问题)
    【解决方案4】:

    假设您的所有课程确实是公开的,您是否已签署您的程序集并将其添加到 GAC?

    有几个步骤要完成,here 是一个简短的教程。有一些琐碎的细节,但我链接到的示例应该可以让您振作起来。

    【讨论】:

    • 我已经完成了一个发布签名的构建,并且确实已经将它添加到了 GAC。但是 GAC 只关心运行时程序集。这个问题是关于设计时程序集
    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多