[英]VS2015 compiler error message “the name client.UseDefaultCredentials does not exist in the current context” for simple C# SMTP Code
[英]C# compiler error in Visual Studio 2012, no longer error in VS2015
這更像是一個好奇心問題,因為修復既簡單又明顯。 我使用Visual Studio 2015,但我的隊友使用Visual Studio 2012.我們在同一個項目上工作。 是的,這是一個壞主意,但我們很快就會解決這個問題。 昨天,我檢查了一些他整合到他的分支中的代碼,並立即出現編譯錯誤。 這是代碼(由於並非所有代碼都是必需的,因此已經簡化了一些代碼):
//Load basic project information from db
var projInfo = (from v in context.TPM_PROJECTVERSION
join p in context.TPM_PROJECT on v.PROJECTID equals p.PROJECTID
join pto in context.TPM_USER on v.TPM_USER1.USERID equals pto.USERID into primaryowner
from subpto in primaryowner.DefaultIfEmpty()
join pt in context.TPM_PROJECTTYPES on p.PROJECTTYPEID equals pt.PROJECTTYPEID
where v.PROJECTID == projectId && v.VERSIONID == versionId
select new
{
ProjectName = v.NAME,
BusinessLaunchDate = p.BUSINESSLAUNCHDATE,
LearningExperiences = v.TPM_PROJECTVERSIONGAMEPLANS
.SelectMany(p => p.TPM_LEARNINGEXPERIENCES.Select(le => le.NAME)),
}).First();
在我的機器上,這編譯並正常工作。 在他的機器上,他得到錯誤:
錯誤10無法在此范圍內聲明名為“p”的局部變量,因為它會為“p”賦予不同的含義,“p”已在“父級或當前”范圍中用於表示其他內容
有問題的變量p
是.SelectMany
調用中的p
:
.SelectMany(p => p.TPM_LEARNINGEXPERIENCES.Select(le => le.NAME)),
這顯然與上面連接中定義的p
沖突:
join p in context.TPM_PROJECT on v.PROJECTID equals p.PROJECTID
對我來說,這似乎很好。 所以我將變量隱藏在我不再需要的外部范圍中。 我可以通過重命名其中一個p
變量來修復他的編譯錯誤。
我的問題:
我知道VS2012使用C#5.0,而VS2015使用C#6.0。 6.0對內部作用域中的變量名稱是否更寬松 ,或者是否有其他一些設置在這里發揮作用。 為什么這是一個錯誤,另一個完全沒問題? 順便說一句,我也沒有收到任何警告,所以它也不是一個錯誤類型的治療警告 。
想法?
作為避免奇怪錯誤的快速保存解決方案,請在兩種環境中使用c#6統一建築物。 您可以在每個項目的基礎上將c#6.0作為NuGet包安裝到VS2012中
通過Nuget安裝C#編譯器
Install-Package Microsoft.Net.Compilers
在測試環境中嘗試此操作並檢查此錯誤是否消失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.