You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Esta entrada va a ser corta y simplemente va a explorar una curiosidad poco común que me he visto obligado a utilizar.
Trabajando en OpinionatedFramework, necesité de una serie de source-generators y decidí crearlos todos en el mismo proyecto (csproj), sin embargo, más adelante me vi en la necesidad de separar uno de ellos para poder lanzarlo junto con el paquete de Ensure API.
Este único proyecto que contenía los source-generators, contenía también una clase helper utilizada por cada uno de source-generators. La estructura del proyecto era similar a esta:
Para poder separarlo en distintos proyectos, lo primero que se me ocurrió hacer es un proyecto común que contenga esta clase helper y referenciarlo desde el resto de proyectos source-generators, obteniendo el siguiente resultado:
Sin embargo, a la hora de intentar utilizar los generadores, estos fallaban. El motivo del fallo está fuera del ámbito de esta entrada, pero si tienes interés, puedes leer el hilo en el repositorio de Roslyn.
Dandole un poco al coco, recordé que cuando generé el paquete NuGet de Ensure API, añadí al proyecto los archivos de licencia, icono y readme que, se encuentran fuera de la ubicación del mismo y, aparecieron en el IDE indicado como un acceso directo.
Esto lo hice simplemente indicando la ruta en una etiqueta None de MSBuild en el fichero csproj:
Se me ocurrió que tal vez podría hacer lo mismo con un fichero de C# y… ¡voilà!
Algo a tener en cuenta es la acción que realizará MSBuild sobre este fichero. En el caso anterior simplemente se incluía sin realizar ninguna acción (None), pero ahora necesitamos que ese fichero incluido se compile (Compile). Podemos referenciar al fichero en el csproj de la siguiente manera:
Tras añadirlo al csproj, apareció como un “acceso directo” en ambos proyectos:
Además, como curiosidad, cada uno de estos proyectos compila este archivo por separado y añade dentro de su propio ensamblado, lo que permite cosas tan chulas como compartir una clase con visibilidad internal entre varios ensamblados.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Esta entrada va a ser corta y simplemente va a explorar una curiosidad poco común que me he visto obligado a utilizar.
Trabajando en OpinionatedFramework, necesité de una serie de source-generators y decidí crearlos todos en el mismo proyecto (csproj), sin embargo, más adelante me vi en la necesidad de separar uno de ellos para poder lanzarlo junto con el paquete de Ensure API.
Este único proyecto que contenía los source-generators, contenía también una clase helper utilizada por cada uno de source-generators. La estructura del proyecto era similar a esta:
Para poder separarlo en distintos proyectos, lo primero que se me ocurrió hacer es un proyecto común que contenga esta clase helper y referenciarlo desde el resto de proyectos source-generators, obteniendo el siguiente resultado:
Sin embargo, a la hora de intentar utilizar los generadores, estos fallaban. El motivo del fallo está fuera del ámbito de esta entrada, pero si tienes interés, puedes leer el hilo en el repositorio de Roslyn.
Dandole un poco al coco, recordé que cuando generé el paquete NuGet de Ensure API, añadí al proyecto los archivos de licencia, icono y readme que, se encuentran fuera de la ubicación del mismo y, aparecieron en el IDE indicado como un acceso directo.
Esto lo hice simplemente indicando la ruta en una etiqueta
None
de MSBuild en el fichero csproj:Se me ocurrió que tal vez podría hacer lo mismo con un fichero de C# y… ¡voilà!
Algo a tener en cuenta es la acción que realizará MSBuild sobre este fichero. En el caso anterior simplemente se incluía sin realizar ninguna acción (
None
), pero ahora necesitamos que ese fichero incluido se compile (Compile
). Podemos referenciar al fichero en el csproj de la siguiente manera:Tras añadirlo al csproj, apareció como un “acceso directo” en ambos proyectos:
Además, como curiosidad, cada uno de estos proyectos compila este archivo por separado y añade dentro de su propio ensamblado, lo que permite cosas tan chulas como compartir una clase con visibilidad
internal
entre varios ensamblados.Beta Was this translation helpful? Give feedback.
All reactions