2015-05-31 108 views
15

我有一個Web API 2項目,其中的幫助頁面在本地運行良好,但在我推送時會拋出此錯誤它天青:找不到未找到方法:System.String System.String.Format(System.IFormatProvider,System.String,System.Object)

方法:「System.String System.String.Format (System.IFormatProvider,System.String,System.Object的)

我暫時關閉自定義錯誤關閉,因此可以看到全堆棧跟蹤here

該錯誤是從下面這行代碼始發:

串selectExpression =的String.Format(CultureInfo.InvariantCulture,MethodExpression的,GetMemberName(reflectedActionDescriptor.MethodInfo));

見行96 here

完整的源代碼可以在GitHub

我甚至不知道在哪裏這個人去。

在此先感謝您的幫助。

+0

請張貼含有違規行的代碼片段,而不是一個鏈接到GitHub庫。 – Alex

+0

我已經看到類似的行爲,其中的代碼有權左轉模糊。從.NET 3到.NET 4。解決方案最終是這樣((字符串)(MyFunction).ToString()) –

+0

@Alex - 我添加了更多的細節。對不起,我沒有在最初添加它,我不認爲這將是重要的,因爲缺少的方法是從網絡框架。 –

回答

21

根據its MSDN page,您使用的重載僅支持.NET 4.6。

要麼將​​主機配置爲運行.NET 4.6,要麼將項目的目標框架更改爲4.5並重新編譯。

4.5中有一個params object[] overload然後將被選中,而不必改變你的代碼。

6

這沒有意義。我們有一個行這樣在我們的應用程序代碼,因爲2009年

String.Format(CultureInfo.CurrentCulture, "You must specify a new password of {0} or more characters.", _membershipService.MinPasswordLength);

最近,我們調升該項目以.NET 4.6和現在,至少對我來說,這符合了同樣的錯誤破壞。顯然,新的重載正在破壞某些東西,而且這種方法並不新鮮。

2

萬一這有助於任何人。在將我們的開發環境升級到VS2015(我們的目標環境是.Net 4)後,我們最近遇到了這個問題(我們的目標環境是.Net 4)

我們的C++/clr項目未正確設置以使用/ clr開關,即它們被設置爲不支持通用語言即使我們在使用clr。在我們升級到VS2015之前,這不會導致問題。

我不完全清楚爲什麼這項工作。我猜測編譯時C++/clr項目必須綁定到特定版本的CLR運行時。如果有人能夠更清楚地解釋這一點,我會很感興趣。

6

如果您既不能將主機升級到4.6,也不能將項目降級到4.5,則有一種解決方法:將「對象[]」作爲參數傳遞,而不是「對象」。所以你會強制使用「params object []」重載。示例:

return string.Format(formatProvider, "{0:" + format + "}", new object[] { value }); 
1

我們正在使用自定義構建服務器。即使項目TargetFrameworkVersion是V4.5.1,當.NET 4.6.1安裝建立服務器和格式參數傳遞一個參數,編譯器傾向於使用此重載

public static string Format(IFormatProvider provider, string format, object arg0) 

,而不是

public static string Format(IFormatProvider provider, string format, params object[] args) 

唯一的解決辦法是創建和傳遞數組參數

實施例:

string.Format(CultureInfo.CurrentCulture, "Hello {0}", new[] { name });

0

Azure Data Lake Analytics今天在.NET 4.5上運行。所以我們不支持.NET 4.6彙編場景,這種錯誤是可能的。爲了避免它,你應該在.NET 4.5中重新構建你的組合件。

下面的「非推薦」的解決方法可能與.NET 4.6組裝作業:重寫 string.Format(provider, format, arg0, arg1)string.Format(provider, format, new object[] { arg0, arg1 })

相關問題