Właśnie zaczął grać z Microsoft.Contracts (najnowszą wersję) i podłączając go w górnej części interfejsu próbki i teraz wygląda to tak:
namespace iRMA2.Core.Interfaces
{
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Diagnostics.Contracts;
/// <summary>
/// Base Interface declarations for iRMA2 Extensions
/// </summary>
[InheritedExport]
[ContractClass(typeof(IiRMA2ExtensionContract))]
public interface IiRMA2Extension
{
/// <summary>
/// Gets the name.
/// </summary>
/// <value>The name of the Extension.</value>
string Name { get; }
/// <summary>
/// Gets the description.
/// </summary>
/// <value>The description.</value>
string Description { get; }
/// <summary>
/// Gets the author of the extension. Please provide complete information to get in touch with author(s) and the corresponding department
/// </summary>
/// <value>The author of the extensions.</value>
string Author { get; }
/// <summary>
/// Gets the major version.
/// </summary>
/// <value>The major version of the extension.</value>
int MajorVersion { get; }
/// <summary>
/// Gets the minor version.
/// </summary>
/// <value>The minor version.</value>
int MinorVersion { get; }
/// <summary>
/// Gets the build number.
/// </summary>
/// <value>The build number.</value>
int BuildNumber { get; }
/// <summary>
/// Gets the revision.
/// </summary>
/// <value>The revision.</value>
int Revision { get; }
/// <summary>
/// Gets the depends on.
/// </summary>
/// <value>The dependencies to other <c>IiRMA2Extension</c> this one has.</value>
IList<IiRMA2Extension> DependsOn { get; }
}
/// <summary>
/// Contract class for <c>IiRMA2Extension</c>
/// </summary>
[ContractClassFor(typeof(IiRMA2Extension))]
internal sealed class IiRMA2ExtensionContract : IiRMA2Extension
{
#region Implementation of IiRMA2Extension
/// <summary>
/// Gets or sets the name.
/// </summary>
/// <value>The name of the Extension.</value>
public string Name
{
get
{
Contract.Ensures(!String.IsNullOrEmpty(Contract.Result<string>()));
return default(string);
}
set
{
Contract.Requires(value != null);
}
}
/// <summary>
/// Gets the description.
/// </summary>
/// <value>The description.</value>
public string Description
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// Gets the author of the extension. Please provide complete information to get in touch with author(s) and the corresponding department
/// </summary>
/// <value>The author of the extensions.</value>
public string Author
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// Gets the major version.
/// </summary>
/// <value>The major version of the extension.</value>
public int MajorVersion
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// Gets the minor version.
/// </summary>
/// <value>The minor version.</value>
public int MinorVersion
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// Gets the build number.
/// </summary>
/// <value>The build number.</value>
public int BuildNumber
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// Gets the revision.
/// </summary>
/// <value>The revision.</value>
public int Revision
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// Gets the Extensions this one depends on.
/// </summary>
/// <value>The dependencies to other <c>IiRMA2Extension</c> this one has.</value>
public IList<IiRMA2Extension> DependsOn
{
get
{
Contract.Ensures(Contract.Result<IList<IiRMA2Extension>>() != null);
return default(IList<IiRMA2Extension>);
}
}
#endregion
}
}
teraz dlaczego są dwa Contract.Ensures (...) „blured” się wizualnie z podpowiedzi mówiąc: "Metoda Inwokacja została pominięta Kompilator wygeneruje wywołanie metody, ponieważ metoda jest warunkowa lub jest metodą częściową bez implementacji "iw rzeczywistości dane wyjściowe CodeContracts nie liczą/nie pokazują ... Czego mi brakuje & robi źle tutaj?
-J
@ Jörg B .: Myślę, że używasz Resharpera. Resharper nie wie, że CONTRACTS_FULL zostanie zdefiniowany podczas kompilacji, chyba że umieścisz go w "warunkowych symbolach kompilacji" dla projektu. To powinno naprawić ... ale ma tę wadę, że będziesz musiał zmienić zarówno stronę * jak i * Kontraktów kodowych, jeśli zmienisz poziom Umów, z których korzystasz. – porges
@Porges: yep yep. Dodatkowo stworzyłem raport o błędzie po raz za r # at http://youtrack.jetbrains.net/issue/RSRP-182553 dla R # do obsługi kontraktów kodu natywnie dla jego sugestii/ostrzeżeń refaktoryzacji kodu. –
404 http://emberapp.com/joergbattermann/images/code-contracts/sizes/m.png nie znaleziono. –