プロジェクトをVS 2013からVS 2015に移行した後、私はいくつかのオブジェクト参照エラーに直面しています。AppDomain.CurrentDomain.GetAssemblies()で何が変更されましたか?SelectMany()?
この例では、問題を特定します。
私は同じ名前のStatusList
という2つのクラスを持っています。それらは異なる名前空間の下にあります。
namespace TestNS.Interop.Cache.CacheItems
{
public class StatusList
{
public string Message { get; set; }
public StatusList()
{
Message = "I am a cache statuslist";
}
}
}
namespace TestNS.Interop.Enquiry
{
public class StatusList
{
public string Message { get; set; }
public StatusList()
{
Message = "I am an enquiry statuslist";
}
}
}
メインプログラムは、AppDomain.CurrentDomain.GetAssemblies()
に呼び出しを行い、最初のStatusList
を探します。あなたはVS2013を使用して、このプロジェクトのためのクリーンを実行してビルドする場合
var manyitems = AppDomain.CurrentDomain.GetAssemblies().SelectMany(o => o.GetTypes());
var typeServerCacheItem = manyitems.FirstOrDefault(o => o.Name == name);
class Program
{
static void Main(string[] args)
{
PrintMessagefromAssembly();
}
private static void PrintMessagefromAssembly()
{
const string name = "StatusList";
var manyitems = AppDomain.CurrentDomain.GetAssemblies().SelectMany(o => o.GetTypes());
var typeServerCacheItem = manyitems.FirstOrDefault(o => o.Name == name);
if (typeServerCacheItem == null)
{
Console.WriteLine("No item found");
return;
}
Console.WriteLine(typeServerCacheItem.FullName);
Console.ReadKey();
}
}
が返される型ServerCacheItem
はCacheItems
下のクラスです。
VS2015を使用してクリーンビルドを実行する場合は、ServerCacheItem
タイプが返されます。クラスはEnquiry
です。
コードを修正する必要があります。コードに論理エラーがあります。CacheItem
のフィルタ条件が存在する必要があります。 しかし、私はAppDomain.CurrentDomain.GetAssemblies()
の仕組みが変わったことを理解しようとしていますか?
ウォッチウィンドウ2015 VS
ウォッチウィンドウVS 2013
これらのタイプは同じアセンブリ内にあるかどうかを確認します。もしそれらがあれば、あなたの質問は本当に 'Assembly.GetTypes()'で変更されたものです(答え:これは現在、注文は文書化されていないので、別の注文を使用しています。もしそうでなければ、あなたの質問は 'AppDomain.GetAssemblies()'で変更されたものかもしれません(答え:これは現在、注文が文書化されていないので、別の注文を使用しています。どちらの方法でスライスしても、MSが自由に変更できるものは変更されました。正確な変更を掘り下げることは、おそらくあなたの調査の結果に依存することができないので時間の無駄です。 –