Je sais que le remplacement .NET Core de Assembly.GetExecutingAssembly()
est typeof(MyType).GetTypeInfo().Assembly
, mais qu’en est-il du remplacement
Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false)
J'ai essayé d'ajouter le dernier bit du code après Assembly pour la première solution mentionnée comme suit:
typeof(VersionInfo).GetTypeInfo().Assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute));
mais cela me donne un message "Impossible de convertir implicitement en objet [].
UPDATE: .__ Oui, comme l'indiquent les commentaires ci-dessous, je pense que cela est lié au type de sortie.
Voici l'extrait de code, et j'essaie simplement de le changer pour qu'il soit compatible avec .Net Core:
public class VersionInfo
{
public static string AssemlyTitle
{
get
{
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
// More code follows
J'ai essayé de changer ceci pour utiliser CustomAttributeExtensions.GetCustomAttributes(
mais je ne comprends pas suffisamment c # pour savoir comment implémenter le même code que ci-dessus. Je suis encore mêlé à propos de MemberInfo et Type, etc. Toute aide est extrêmement appréciée!
Je soupçonne que le problème est dans le code que vous n'avez pas indiqué: où vous utilisez le résultat de GetCustomAttributes()
. En effet, Assembly.GetCustomAttributes(Type, bool)
DANS .NET FRAMEWORK RENVOIE object[]
, alors que CustomAttributeExtensions.GetCustomAttributes(this Assembly, Type)
DANS .NET CORE RENVOIE IEnumerable<Attribute>
.
Vous devez donc modifier votre code en conséquence. Le moyen le plus simple serait d'utiliser .ToArray<object>()
, mais une meilleure solution pourrait être de changer votre code afin qu'il puisse fonctionner avec IEnumerable<Attribute>
.
Cela fonctionne pour moi dans .NET Core 1.0:
using System;
using System.Linq;
using System.Reflection;
namespace SO_38487353
{
public class Program
{
public static void Main(string[] args)
{
var attributes = typeof(Program).GetTypeInfo().Assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute));
var assemblyTitleAttribute = attributes.SingleOrDefault() as AssemblyTitleAttribute;
Console.WriteLine(assemblyTitleAttribute?.Title);
Console.ReadKey();
}
}
}
AssemblyInfo.cs
using System.Reflection;
[Assembly: AssemblyTitle("My Assembly Title")]
project.json
{
"buildOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
},
"System.Runtime": "4.1.0"
},
"frameworks": {
"netcoreapp1.0": { }
}
}
Cela fonctionne pour moi:
public static string GetAppTitle()
{
AssemblyTitleAttribute attributes = (AssemblyTitleAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyTitleAttribute), false);
return attributes?.Title;
}
Ne serait-ce pas le plus simple?
string title = Assembly.GetExecutingAssembly().GetCustomAttribute<AssemblyTitleAttribute>().Title;
Dis-moi juste.
C'est ce que j'utilise:
private string GetApplicationTitle => ((AssemblyTitleAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyTitleAttribute), false))?.Title ?? "Unknown Title";