如何使用.NET Core 2 ClassLib项目中的C#从.csproj文件读取/获取属性组值



我想使用C#获得<PropertyGroup />的元素<Location>SourceFiles/ConnectionStrings.json</Location>的值。它位于.NET Core 2 ClassLib项目的.csproj文件中。结构如下:

<PropertyGroup>
  <TargetFramework>netcoreapp2.0</TargetFramework>
  <Location>SharedSettingsProvider.SourceFiles/ConnectionStrings.json</Location>
</PropertyGroup>

我可以从.NET核心库中使用哪个类来实现这一目标?(不是.NET框架(

更新1:我想在应用程序(此.CSPROJ文件构建(运行时读取值。部署前后

谢谢

如评论中所讨论的,CSPROJ内容仅控制预定义的构建任务,并且在运行时不可用。

但是MSBuild是灵活的,可以使用其他方法来持续某些值以在运行时可用。

一种可能的方法是创建自定义汇编属性:

[System.AttributeUsage(System.AttributeTargets.Assembly, Inherited = false, AllowMultiple = false)]
sealed class ConfigurationLocationAttribute : System.Attribute
{
    public string ConfigurationLocation { get; }
    public ConfigurationLocationAttribute(string configurationLocation)
    {
        this.ConfigurationLocation = configurationLocation;
    }
}

然后可以从CSPROJ文件内部使用自动生成的汇编属性:

<PropertyGroup>
  <ConfigurationLocation>https://my-config.service/customer2.json</ConfigurationLocation>
</PropertyGroup>
<ItemGroup>
  <AssemblyAttribute Include="An.Example.ConfigurationLocationAttribute">
    <_Parameter1>"$(ConfigurationLocation)"</_Parameter1>
  </AssemblyAttribute>
</ItemGroup>

然后在代码中运行时使用:

static void Main(string[] args)
{
    var configurationLocation = Assembly.GetEntryAssembly()
        .GetCustomAttribute<ConfigurationLocationAttribute>()
        .ConfigurationLocation;
    Console.WriteLine($"Should get config from {configurationLocation}");
}

相关内容

  • 没有找到相关文章

最新更新