在我的项目中,我有一个名为devices.json的资源文件,该文件在项目外部维护,以确保不同项目之间的一致性。所以我只将文件添加为链接:
<ItemGroup>
<Content Include="..\..\resources\devices.json" Link="devices.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
该文件已正确复制到build文件夹,但是asp.net核心项目似乎在将项目根目录设置为工作目录的情况下运行。因此,如果我尝试使用File.ReadAllText("devices.json")
读取文件,它将抛出FileNotFound异常。
是否有一种方法可以将devices.json文件复制到构建版本的项目根目录中,这样就可以访问它而无需对开发输出目录进行硬编码?
Id而不必写 字符串文本;
if(env.IsDevelopment())
{
text = File.ReadAllText("bin\\Debug\\netcoreapp2.1\\devices.json");
}
else
{
text = File.ReadAllText("bin\\Release\\netcoreapp2.1\\devices.json");
}
即使我这样做了,这也会在我发布项目后立即中断,因为整个项目将被复制到发布目录,然后将其作为CurrentWorking目录运行。
有人建议如何解决这个问题?
答案 0 :(得分:1)
您可以在项目文件中使用构建目标将其复制:
<Target Name="copyDevices" AfterTargets="AfterBuild">
<Copy SourceFiles="../../resources/devices.json" DestinationFolder="$(OutDir)" />
</Target>
然后使用以下内容在您的Web应用程序中读取文件:
var test = File.ReadAllText(
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "devices.json")
);
答案 1 :(得分:-1)
text = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "devices.json"));