【问题标题】:I see a DLL in GAC_MSIL but there's not an assembly我在 GAC_MSIL 中看到一个 DLL,但没有程序集
【发布时间】:2012-06-15 12:18:19
【问题描述】:

我正在查看里面的 ClassLibrary1.dll

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\ClassLibrary1\v4.0_1.0.0.0__2efc1c0b243a0c09

因为这个而被自动放置在那里:

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools>gacutil.
exe /i "C:\Users\wherever\ClassLibrary1.dll"
Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Assembly successfully added to the cache

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools>

但是之后在里面找不到对应的程序集

C:\Windows\assembly

我做错了什么?我希望能够通过以下代码使用该类库:

<?php
 $obj = new DOTNET("ClassLibrary1", "Version=1.0.0.0", "Culture=neutral", "PublicKeyToken=2efc1c0b243a0c09", "ClassLibrary1.Class1"); 
 $output=$obj->HelloWorld();
 echo $output;
?>

类如下所示:

Public Class Class1
    Public Sub HelloWorld()
        MsgBox("hello, world")
    End Sub
End Class

感谢您的帮助。

【问题讨论】:

  • 你的类的命名空间和项目的根命名空间是什么?

标签: php .net vb.net com com-interop


【解决方案1】:

我假设它是一个 .net 4 程序集?如果是这样,请注意 \Windows\assembly 中没有列出任何 .net 4 程序集。

这是因为 .net 4 程序集位于不同的位置。这没什么好担心的,只要您可以在 GAC 中使用该程序集即可。

【讨论】:

  • 非常感谢您的回复。是的,它是一个 .net 4 程序集。至少是一个尝试过的,因为到目前为止我唯一看到的是 GAC_MSIL 文件夹中的 ClassLibrary1.dll 文件(作为“ClassLibrary1.dll”)。它没有与我在 \Windows\assembly 中看到的图标相同的图标(但它们都没有,是吗,所以我想这至少是一个好兆头)。我仍然无法让类通过 PHP 来表达。不知道我做错了什么。基本上我还不知道我是否可以在 GAC 中使用该程序集;根据我的描述,到目前为止,一切都在适当的位置吗?
  • 您是否正确签署了程序集? GAC 需要有效的签名。
  • 也感谢您提醒我注意这一点:“如果是这样,请注意 \Windows\assembly 中没有列出任何 .net 4 程序集。”
  • 即使我的项目是在 VB.NET 中,我还是去了解决方案资源管理器!在 VS2010 中的属性并单击左侧的签名选项卡。然后选中“签署程序集”框,并在该字段中选择一个强名称密钥文件。我构建了 dll,然后在其上使用 gacutil.exe 并获得命令行反馈,该程序集已成功添加到缓存中。所以希望与我使用 MSVC 编写项目时或多或少相同,但也许情况并非如此?
  • @user225626 - 我对 PHP .NET 互操作的工作原理一无所知,所以你确定它与 .net 4 兼容吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多