2014-06-20 26 views
3

我正在嘗試構建一個本地nuget包,它提供了調用約定的一個關鍵點,爲x86構建提供了具有cdecl和stdcall約定的DLL。 (大多數用戶更喜歡cdecl調用約定,但誰的P/Invoke這個庫.NET用戶寧願STDCALL因各種原因。)本機Nuget的cdecl和stdcall調用約定

.autopkg同時包含的cdecl和STDCALL支點:

nuget 
{ 
    [nuspec omitted for brevity] 

    files { 
      [Win32,cdecl] { 
       lib: build\x86-cdecl\Debug\git2-0_21_0.lib; 
       bin: build\x86-cdecl\Debug\git2-0_21_0.dll; 
       symbols: build\x86-cdecl\Debug\git2-0_21_0.pdb; 
      } 

      [Win32,stdcall] { 
       lib: build\x86-stdcall\Debug\git2-0_21_0.lib; 
       bin: build\x86-stdcall\Debug\git2-0_21_0.dll; 
       symbols: build\x86-stdcall\Debug\git2-0_21_0.pdb; 
      } 
    }; 
} 

使用構建.nupkg本地nuget腳本似乎成功,並且在標準C項目(一個使用cdecl調用約定)中安裝和使用nuget包成功。

但是,如果我創建一個新的C項目並將調用約定設置爲stdcall並安裝nuget包,則不會獲得我的庫的stdcall版本。相反,cdecl版本已安裝,我無法鏈接。

我很樂觀Nuget軟件包管理器會檢測我的項目配置並使用適當的調用約定數據透視(就像處理器類型一樣),但這似乎並沒有發生。我也沒有給出選擇手動選擇調用約定的選項。但事實上,有在autopkg配置中的一個關鍵點讓我覺得我可能選擇一個。

我該如何利用這個支點?

+0

嗯。 *應該*起作用了。 Quick Question:您正在使用哪個版本的工具和VC++? PS> show-coapptoolsversion 我可能需要查看生成的包文件。 –

+0

@GarrettSerack - VS 2013 Update 2和CoApp Powershell開發者工具版本1.23.521.0。 '.autopkg'和生成的'.nupkg'位於http://www.edwardthomson.com/temp/libgit2.0.0.3.0.zip –

+0

@GarrettSerack我需要在VS項目的設置中以不同的方式做用它的調用約定標記它?或者Nuget讀取我的編譯器標誌來確定這一點? –

回答

0

盡我所知,這是完全不可能的。可悲的是,同樣不可能獲得幫助。

原生Nuget是遺憾的是,幾乎沒有經過測試,幾乎無法操作,完全沒有支持的錯失機會的荒地。唯一的答案就是不使用它。