J'ai juste commencé à regarder dans .Net Core, et je ne vois pas de ressources classiques ni de ressources qui ressemblent à des ressources. Dans les bibliothèques de classes .Net classiques, j’ai pu ajouter, par exemple, des fichiers texte avec un script à mon projet, puis ajouter ces fichiers aux ressources du projet. Après cela, je pourrais facilement l'utiliser de la manière suivante:
Connection.Execure(Properties.Resources.MySuperScript);
Je constate qu’il n’ya pas cette fonctionnalité dans les bibliothèques .Net Core, du moins je ne la vois pas. Existe-t-il une alternative dans .Net Core pour stocker des données statiques en tant que ressource incorporée dans des bibliothèques? Et comment l'utiliser s'il existe?
UPDATE:
.NET Core 1.1 et versions ultérieures ont abandonné project.json
et retourné à .csproj
des dossiers. Cela change l'étape 2, mais pas tellement. Les lignes nécessaires sont très similaires:
<ItemGroup>
<Content Remove="_fonts/OpenSans.ttf" />
<Content Remove="_fonts/OpenSans-Bold.ttf" />
<Content Remove="_fonts/OpenSans-Italic.ttf" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="_fonts/OpenSans.ttf" />
<EmbeddedResource Include="_fonts/OpenSans-Bold.ttf" />
<EmbeddedResource Include="_fonts/OpenSans-Italic.ttf" />
</ItemGroup>
Il peut y avoir un semblable *.tff
forme; non confirmé.
Les étapes 1 et 3 sont inchangées.
Pour utiliser les ressources incorporées dans le projet .NET Core 1.0, procédez comme suit:
1.- Ajoutez vos fichiers incorporés comme d’habitude.
Exemple: certains fichiers FONT sur un répertoire nommé "_fonts"
2.- Modifier "project.json" pour inclure les ressources associées.
Dans mon cas:
"buildOptions": {
"embed": {
"include": [
"_fonts/*.ttf"
]
}
},
3.- Accéder à la ressource incorporée en code.
var Assembly = typeof(MyLibrary.MyClass).GetTypeInfo().Assembly;
Stream resource = Assembly.GetManifestResourceStream("MyLibrary._fonts.OpenSans.ttf");
Le point clé est d'utiliser le bon nom lors de l'appel "GetManifestResourceStream". Vous devez utiliser [nom de l’assemblage]. [Répertoire]. [Nom du fichier].
J'espère que ça aide quelqu'un là-bas ^ _ ^.
Maintenant que project.json
est obsolète, vous devez le spécifier dans le .csproj
fichier.
<ItemGroup>
<EmbeddedResource Include="_fonts\*.ttf" />
</ItemGroup>
Vous pouvez utiliser un caractère générique, ou simplement lister explicitement les fichiers.
Généralement, les gens ont déjà répondu à cette question, il s'agit donc d'un rendu des réponses en quelque chose de simple.
Avant d’utiliser ce qui suit, le fichier doit être ajouté en tant que ressource incorporée à . Csproj / project.json
tilisation
var myJsonFile = ReadManifestData<Tests>("myJsonFile.json");
Méthode
public static string ReadManifestData<TSource>(string embeddedFileName) where TSource : class
{
var Assembly = typeof(TSource).GetTypeInfo().Assembly;
var resourceName = Assembly.GetManifestResourceNames().First(s => s.EndsWith(embeddedFileName,StringComparison.CurrentCultureIgnoreCase));
using (var stream = Assembly.GetManifestResourceStream(resourceName))
{
if (stream == null)
{
throw new InvalidOperationException("Could not load manifest resource stream.");
}
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
Créez simplement un sous-dossier dans votre projet avec vos fichiers.
Dans les propriétés, créez vos fichiers "Ressources incorporées" et "Copier si plus récent".
Ils seront publiés, des dossiers et des fichiers seront créés, et vous pouvez y accéder comme suit:
var mySuperScript= File.ReadAllText(System.IO.Directory.GetCurrentDirectory() + @"\folder\MySuperScript.js")
Avec les versions plus récentes de .Net Core - 2.0 ou version ultérieure, il existe une classe spécialisée EmbeddedFileProvider
qui résume la lecture du fichier incorporé. Pour l'utiliser, ajoutez Microsoft.Extensions.FileProviders.Embedded
package pour votre application:
dotnet add package Microsoft.Extensions.FileProviders.Embedded
Le EmbeddedFileProvider
vous permet de créer un lecteur de flux et de l'utiliser selon votre scénario:
var embeddedProvider = new EmbeddedFileProvider(Assembly.GetExecutingAssembly());
using (var reader = embeddedProvider.GetFileInfo("yourfile.ext").CreateReadStream())
{
// some logic with stream reader
}