Visual Studio'ya uzantı yapıyorum. Kod içinde, onaylar ve kontroller yapmak için Kod Sözleşmeleri kullanıyorum. Uyarı seçeneği seviyesini yüksek olarak ayarlıyorum.Kod Sözleşmelerinin, belirli bir montaj referansını nasıl görmezden gelmesini sağlayabilirim?
Yapmak istediğim şey, EnvDTE referanslarında yapılan tüm kontrolleri dikkate almadan uyarı seviyesini korumaktır.
Aşağıdaki kod örneği düşünün: İsterdim neyi nedenle
Contract.Assume(project.ConfigurationManager != null);
Contract.Assume(project.ConfigurationManager.ActiveConfiguration != null);
Contract.Assume(project.ConfigurationManager.ActiveConfiguration.Properties != null);
: benim şimdiki ayarları ile
public static string GetAbsoluteOutputFolder(EnvDTE.Project project)
{
if (project == null) throw new ArgumentNullException("project");
var path =
project.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath").Value.ToString();
//...
}
CC path
değişken atamadan önce aşağıdaki kontrolleri eklemek için bana gerektirecektir Burada yapmak CC'ye EnvDTE’i “güven” etmeyi ve bu türleri ve özelliklerini görmezden gelerek söylemektir.
Bu amaca hizmet eden "Harici API'da iyimser olun" CC seçeneği olduğunu düşündüm; çıkmıyor.
daha düşük bir uyarı düzeyi gerektirmeyecek şekilde istediğim şekilde davranmasını sağlamanın bir yolu var mı?
DÜZENLEME: Proje düzeyinde çalışacak ve yine de "düzenli" kontrollerin yapılmasına izin verecek bir çözüm istiyorum.
Ben olsaydım, atlamak istediğiniz Çekleri eklerdim.Eğer kodunuz, EnvDTE.Project içindeki bir Null Reference'dan dolayı havaya uçurulursa, bu kontrollere sahip olmak, Null'ın nerede olduğunu tahmin etmek yerine sorunun nerede olduğunu tam olarak bilmenizi sağlayacaktır. –
@MikeBurdick Şey, bu özelliklerin bir kısmının büyük olasılıkla boş kalmamasıdır. Ancak bu meclis sözleşmelerle derlenmediğinden, motorun anlatma yolu yok. Bu nedenle, bunları, sözleşmesiz herhangi bir mülk gibi ele alır ve aynı mülk için tekrar tekrar kontrol edilmesini zorlar. Eğer bir 'Global Configuration', '' Configuration.Properties '' i (örneğin) null olarak döndürürse, bunu kullanabilmem için memnuniyetle kullanırdım. Öyleyse, IMHO'nun daha az kötülük, CC'ye, bu belirli meclise ait herhangi bir kodu görmezden gelmesini söylemek olacaktır. – Crono