扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共2页)
using namespace System; public ref class Test { public: void CallMe() { Console::WriteLine("called me"); } }; |
cl /clr /LD lib.cpp |
using System; class App { static void Main() { Test test = new Test(); test.CallMe(); } } csc app.cs /r:lib.dll |
Unhandled Exception: System.IO.FileNotFoundException: The specified module could not be found. (Exception from HRESULT: 0x8007007E) at App.Main() |
x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c |
显而易见,一个是发布版(Release Build),而另一个是调试版(Debug Build),但重点是,版本号与一个公有密钥权标也是目录名的一部分。如果你查看前一个目录的内容,可看到有msvcm80.dll、 msvcp80.dll、及msvcr80.dll,它们是被称为"Microsoft.VC80.CRT"非托管程序集8.0.50727.42版本的内容。一个非托管程序集可包含一个或多个文件,而这些文件也可为包含本地代码或COM对象的DLL。一个非托管程序集通常被作为一个单独的单元部署,且其中的所有文件由一个被称为"清单(manifest)"的XML文件来描述。
清单文件存储在Manifest目录中,且与程序集同名,但是后缀名为 .manifest。这个文件列出了程序集中的所有文件;此外,还有一个文件的文件名也与程序集同名,但是后缀名为 .cat,这是一个已签名的安全编目文件,其包含了程序集中文件的hash值,正是因为它已签名,所以可以防止被篡改,且Windows也能利用这些hash值来检查程序集的任一部分是否在部署后已被篡改。
Visual Studio安装程序会把Visual Studio的共享库放在一个称为"并列缓存(side-by-side cache)"的地方,那怎样才能有效地利用它呢?
在文章开头,先看一个示例。在命令行中,创建一个C++源文件,输入例1中的代码。(虽然此处使用的是C++/CLI语法,但不管你是用C++/CLI、托管C++、或本地C++,都不影响要讲解的主题。)
例1:lib.cpp
using namespace System; public ref class Test { public: void CallMe() { Console::WriteLine("called me"); } }; |
将其编译为一个托管库程序集:
cl /clr /LD lib.cpp |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者