Tengo un ensamblado .NET, que se lanzará. Su versión de lanzamiento incluye:Ocultar el método público utilizado para ayudar a probar un ensamblado .NET
- A, API documentado pública de métodos que la gente se supone que deben utilizar
- una API pública, pero no documentada de otros métodos, que sólo existen con el fin de ayudar a probar la asamblea, y el que las personas se supone que no deben usar
El ensamblado que se lanzará es un control personalizado, no una aplicación. Para realizar una prueba de regresión, la ejecuto en un marco/aplicación de prueba, que utiliza (además de la API pública/documentada) algunos métodos avanzados/no documentados que se exportan desde el control.
Para los métodos públicos que no quiero que la gente utilice, les excluido de la documentación utilizando la etiqueta <exclude>
(apoyado por el constructor castillo de arena Archivo de ayuda), y el atributo [EditorBrowsable]
, por ejemplo como este:
/// <summary>
/// Gets a <see cref="IEditorTransaction"/> instance, which helps
/// to combine several DOM edits into a single transaction, which
/// can be undone and redone as if they were a single, atomic operation.
/// </summary>
/// <returns>A <see cref="IEditorTransaction"/> instance.</returns>
IEditorTransaction createEditorTransaction();
/// <exclude/>
[EditorBrowsable(EditorBrowsableState.Never)]
void debugDumpBlocks(TextWriter output);
Esto quita con éxito el método de la documentación API y de Intellisense. Sin embargo, si en un programa de aplicación de ejemplo que haga clic derecho en una instancia de la interfaz para ver su definición en los metadatos, todavía puedo ver el método y el [EditorBrowsable]
atribuir, así, por ejemplo:
// Summary:
// Gets a ModelText.ModelDom.Nodes.IEditorTransaction instance, which helps
// to combine several DOM edits into a single transaction, which can be undone
// and redone as if they were a single, atomic operation.
//
// Returns:
// A ModelText.ModelDom.Nodes.IEditorTransaction instance.
IEditorTransaction createEditorTransaction();
//
[EditorBrowsable(EditorBrowsableState.Never)]
void debugDumpBlocks(TextWriter output);
Preguntas:
- ¿hay una manera de ocultar un método público, incluso de los metadatos?
- En caso negativo, en su lugar, para este escenario, ¿recomendaría hacer los métodos
internal
y usar el atributoInternalsVisibleTo
? ¿O recomendarías de otra manera, y si es así, qué y por qué?
Gracias.
Recomendaría un diseño adecuado que no requiera que exponga públicamente el código que prefiere ocultar. –
De acuerdo con Mark. Debería poder probar todo su código a través de sus interfaces públicas sin tener que crear métodos públicos "ocultos" y/o internos. –
@Mark Estoy [probando el código a través de interfaces públicas] (http://stackoverflow.com/questions/856115), pero para ayudarme con la prueba de regresión tengo algunos métodos adicionales, p. que vuelcan el estado interno del control: para que el caso de prueba pueda afirmar el estado interno (no documentado) después de varios eventos de entrada (públicos, documentados). – ChrisW