![](/img/trans.png)
[英]Can't type certain square brackets in Visual Studio 2010 + Resharper
[英]Can't create Type Library File with Visual Studio 2010 generated DLL, but can with command-line compiled
我有一個TestClass.cs文件,其中包含一個接口和一個類,如下所示:
namespace CPierce.CSharpBridge
{
[System.Runtime.InteropServices.Guid("3D08DF02-EFBA-4A65-AD84-B08ADEADBEEF")]
public interface ICSide
{
// interface definition omitted...
}
[System.Runtime.InteropServices.Guid("CBC04D81-398B-4B03-A3D1-C6D5DEADBEEF")]
public partial class CSide : ICSide
{
// class definition omitted...
}
}
當我在命令行編譯它,並在其上運行regasm:
csc /debug /t:library TestClass.cs
regasm TestClass.dll /tlb:TestClass.tlb
我得到一個很好的,大的.tlb文件,適合包含在其他地方的C ++項目中....
10/27/2011 01:50 PM 3,616 TestClass.tlb
當我將TestClass.cs放入Visual Studio中的“類項目”時,編譯它,運行regasm,生成的.tlb很可憐而且幾乎沒用 - 它沒有接口,沒有方法簽名等等......
[Compiled TestClass.cs as part of Project "ClassProject" in Visual Studio]
regasm ClassProject.dll /tlb:ClassProject.dll
10/27/2011 01:58 PM 1,132 ClassProject.tlb
這兩個案例中的C#代碼相同 ,一個是在命令行使用Visual Studio編譯的,給出了完全不同的結果。
是什么賦予了?
-
更新:Hans建議缺少[ComVisible(true)]
屬性導致問題。 嘗試過,它起作用了。 但是仍然沒有回答這個問題, 為什么呢? 為什么我根據我使用的編譯方法獲得不同的結果?
如果在Visual Studio中創建新的類庫,則默認的AssemblyInfo.cs文件包含以下行:
[assembly: ComVisible(false)]
您正在使用的命令行命令僅編譯TestClass.cs文件,因此您獲得了ComVisible的默認設置(從可用證據判斷,可能是true
)。 從IDE編譯時,還包括AssemblyInfo.cs,因此其顯式設置會覆蓋編譯器的默認值。
還要檢查您的類是否具有訪問者類型public的功能。
在我們的例子中,當項目從解決方案中使用時,項目工作正常,但是當我們提取邏輯以創建DLL時 ,它停止創建TLB文件而沒有指示為什么......
所以,如果你有這樣的課程,
public class tlbuser{
private void functionTLB(){
//function code
}
// rest of the class code
}
確保將其更改為:
public class tlbuser{
public void functionTLB(){
//function code
}
// rest of the class code
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.