c#中using所引用的模块,我在程序中并未找到

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中using所引用的模块,我在程序中并未找到相关的知识,希望对你有一定的参考价值。

程序myAssist是使用c#编写的,其中用到的一个dll中(也是c#编写)使用了如下代码:
using myModule;

但我在程序目录中并未找到myMudule模块的相应文件

可奇怪的是,这些文件却可以编译通过(并不是通过编译环境编译的,是通过myAssis提供的功能进行编译的,它在界面上有一个按钮“编译”)

我想找到myModule对应的文件,或库文件!
本人从事c++开发多年,对c#不太了解,using应该是引用库,但是这个库,我该如何找到它呢?
我找到了一个描述myModule的xml描述文件,里面有函数功能定义,不知道 是不是c#的dll都是这样描述的...

但是我还是没找到具体实现这些功能的库。

编译后的dll名称(程序集名称)与空间名是两码事,也就是说两者可以没有任何关系的。

public class MyAssist.class1;
可以看出命名空间是MyAssist,但是存储这个代码的文件可以是其他的名字,将来生成的框架集,也就是dll文件可以更改成任何名称,命名空间都不会改变,所以以MyAssit中虽然知道使用了什么样的空间名,并不能反映出文件名的!

你找到的XML是外部的,在VS中有一项智能感应的功能,这个依赖于这个XML文件。也就是说在写代码时,为什么会自动跳出将要写的方法,或是可以查看方法的内容呢,它只是一个说明文件,用于这种智感应,以提高输入速度。但是一般对于一些private为型的方法与属性都不会在这个中有体现的!

一般情况下,为了输入方便,都在bin文件中引用那个框架集合的,但是事实上两者却是没有任何关系的,在编译时中不过用csc.exe编译时能编译到这个外部文件,也就是说,如果代码是用记事本写的话,就不允许我们引用了么?事实上不是,只要在csc编译时加入要引有的文件即可!有关csc命令格式可以查看相关的说明!

在编译过程中拿到编译时的生成说明,可以知道引用有哪个程序集,然后再具体看是哪个程序集即可。如果拿不到编译生成说明只能采用一些非常规手段,写一些有关这个程序集的错误语句,如果没有进行行殊处理的话,一般错误中会报告程序集名称,直接用反射语句,反射程序集名称也是可行办法之一。总之想办法拿到程序集名称,才知道是哪个程序集。

在后利用反射工具,可反射出代码——有加密与混淆的程序集还是有一定的难度的,不是想破解就可以破解的!追问

有bin文件,可是我如何打开,利用呢?

我就是要调用这个库中的方法。
可是现在,搞不定,拜托。

追答

bin文件夹吧?在其中有dll文件的,可以通过反射工具进行反射。

如果你只是使用这个类库,那么对方提供类库时一般提供有文档,查看文档即可!如果没有,按照约定,在VS编辑中找到方法,因为你存在有xml文件,所以他会提示你每一个方法的用法的。

如果他什么都没有给你,又不是约定俗成,那么,这个文档又有何用处呢?

追问

大哥,人家不让我用但我非用不可,如果用了,就相当于破解了底层接口。我是c++调用,假如现在 有xml 有dll,c++要调用如何搞?

事实上按前面哥们说的,我通过引用的方式查看了所有已知dll接口,并没有xml文件中描述的方法。

追答

可能是加密过的,如果你用C++好象是调用不了。因为他可能不是专门写的让其他语言调用的。在C#高级编程中, 们很容易调用C++的东西,如果写dll让C++调用,必须要先声明好,因为你得到的dll可能就是我们用的dll,事实上他与windows下的dll是不同的,这个dll必须要.net framework运行环境才可以,它不是真正的dll,只是一个IL语言的集合,不能肯定是不是能够其他编程环境调用。如果是在托管环境下,其他语言一定是无法调用的。当前不能肯定你用 C++可以用!

参考技术A 如果是DLL的文件,必须先在项目中引用文件啊。引用文件时无非就是.net组件或者.com或者自定义扩展文件。你这个应该是自定义的。所以在项目中就应该能直接看到文件啊。追问

我找到了一个描述myModule的xml描述文件,里面有函数功能定义,不知道 是不是c#的dll都是这样描述的...
但是我还是没找到具体实现这些功能的库。

确实有几个dll,但是我无法查看他们的接口,用dependency无法查看。

追答

dll文件是封装好的,如果你安装了VS环境,采用VS环境打开项目的话,就可以在项目中双击打开DLL文件,当然是不能看到文件的代码的,但是可以看到文件所有的接口以及接口的解释(假如编译DLL时候做了解释的话)。

追问

引用的地方,找不以文件,是个黄色的叹号。

但是,通过myAssist上的操作,却可以编译通过。

如果他是 了防止别人恶意调用做了手脚,那可能使用了什么办法?

C#提示未能找到类型或命名空间名称”Renderer“(是不是缺少 using 指令或程序集引用)怎么解决?

参考技术A 可以根据提示自动添加相应的命名空间的。追问

可是怎么添加?它属于哪个命名空间,我在VS2010的所有属性中搜索到的是ToolStrip的一属性,可用的是一类。

追答

我用图给你说明吧。看下图,同样的错误提示:

你把鼠标悬停到这个名称上就会出现下图红框中的一个小标志:

你将鼠标放到这个标志上,就会编程下图的样子:

是不是旁边多了一个向下的小箭头,你单击一下这个箭头就会弹出一个下拉列表,如下图:

下拉列表中就会提供出可能的命名空间列表,一般就是选第一个。你单击一下列表中正确的那个命名空间的名称,就表示using该命名空间。然后回到程序的using列表中,会看到下图红框中的using命名空间:

OK !问题解决,错误消失。

追问

下拉列表中命名空间列表空空如也。这是不是要下载这样的一个类集,然后添加到引用中?

追答

这个是你自定义的一个类吗?还是你引用其他自定义的Dll动态链接库里的类或方法?
如果是引用其他自定义的Dll动态链接库里的类或方法,你检查看看你有没有将这个脚本导入到你的工程中并用using引用它。

本回答被提问者采纳

以上是关于c#中using所引用的模块,我在程序中并未找到的主要内容,如果未能解决你的问题,请参考以下文章

C#错误:未能找到类型或命名空间名称“MessageBoxResult”(是不是缺少 using 指令或程序集引用?)怎么办??

C# 未能找到类型或命名空间名称“Form1”(是不是缺少 using 指令或程序集引用?)

c#引用其它程序的程序集时报错

C# 未能找到类型或命名空间名称 "MyRectangle"(是不是缺少 using 指令或程序集引

VS 项目(c#)引用了 DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称

C#程序集引入无效的解决方法