2017-03-01 31 views
-1

我使用的是一流的呼叫CloudQueueMessage從Azure存儲SDK它具有以下兩個構造函數:錯誤超載構造

public CloudQueueMessage(byte[] content); 
public CloudQueueMessage(string content); 

我有一些二進制數據傳遞給該類因此我想用構造函數接受byte[]。這裏是什麼,我試圖做一個人爲的例子:

byte[] data = ... binary data goes here ...; 
var cloudMessage = new CloudQueueMessage(data); 

出人意料的是,我得到Visual Studio中的以下編譯器錯誤:

CS1503參數1:不能從轉換「的byte [] 'to'string'

就好像編譯器試圖使用接受字符串的重載,當然也無法將字節數組轉換爲字符串。

請注意,我不想將字節數組轉換爲字符串,我只需要幫助,找出編譯器爲什麼不使用適當的構造函數。

萬一重要:我正在使用Azure存儲nuget軟件包的8.1.1版本。

UPDATE: 這是我看到的時候我按在Visual Studio F12(注意byte[]構造被高亮顯示): f12 from Visual Studio

+0

不應該做那。如果你顯式地將'data'作爲一個字節數組('...'new CloudQueueMessage((byte [])data)''),會發生什麼? – itsme86

+0

我得到了完全相同的錯誤,請相信與否! – desautelsj

+0

我甚至嘗試過'var cloudMessage = new CloudQueueMessage((byte [])null);'但是我得到相同的編譯錯誤 – desautelsj

回答

0

我終於想出了public CloudQueueMessage(byte[] content)只能在.NET 4.x中使用,並且它在.NET Core中不可用(我想知道爲什麼這個重載的構造函數在.NET核心中被刪除了)。

因此,我正在使用.NET的核心以下解決方法:

var cloudMessage = new CloudQueueMessage(string.Empty); cloudMessage.SetMessageContent(data);

1

您可以深入到構造函數的定義,看看它的引用從?這聽起來像是某處存在版本衝突。

在根應用的bin文件夾中的Microsoft.WindowsAzure.Storage.dll上使用ILDASM,並導航到CloudQueueMessage類,看看是否可以找到相同的構造函數。您的應用程序似乎在運行時以某種方式使用較早的版本。

你是否清除了所有obj和bin文件夾和包文件夾?

+0

當你說「向下鑽取」時,你的意思是通過查看源代碼?他們的來源是在Github上,所以我會很高興看到,但我不知道在哪裏尋找。 – desautelsj

+0

編譯的源代碼F12,轉到定義。然後看看引用的程序集是否包含正確的構造函數重載。 –

+0

我用屏幕截圖更新了我的原始問題,演示了我按F12時看到的內容 – desautelsj