我想使用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}");
}