如何在.net Core中的库中包含文件

时间:2018-07-11 15:36:11

标签: c# .net .net-core

我有一个取决于项目B的项目A。

在项目B中,我在构建中包括其他文件,如下所示:

<ItemGroup>
    <None Include="jsfiles/**/*"  CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

在项目B中,我正在像这样加载文件:

File.ReadAllText("jsfiles/foo.js");

这将文件成功复制到out目录。但是,当我在项目A中包含项目B时,运行时将解析相对于项目A根目录的文件,而不是相对于输出目录的文件。因为这些文件不存在于Project A的根目录中(但确实存在于Project A的输出目录中),所以找不到它们。

什么是在Project B中加载文件以使其在Project B包含在Project A中时仍能正常工作的正确方法?

基本上,我只是在寻找在项目中包含其他资源的正确方法。

2 个答案:

答案 0 :(得分:1)

我们的解决方案层次结构:

ProjectA
  Startup.cs       // Uses TextService.cs that uses Text.txt
  ProjectA.csproj  // Does not want to now anything about how TextService works
                   // just has a dependency on Project B
ProjectB
  Text.txt
  TextService.cs   // This one uses Text.txt file
  ProjectB.csproj  // Contains EmbeddedResource with Text.txt here

您的用例可能有所不同,但是我发现对我们有用的是使用EmbeddedResource文件而不是Content文件中的csproj标记。这样,文件将同时包含在上述两种情况下:

  • 构建ProjectB
  • 发布ProjectA(具有ProjectB依赖性)时

ProjectB.csproj中的代码块:

<ItemGroup>
  <EmbeddedResource Include="path\to\Text.txt">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </EmbeddedResource>
</ItemGroup>

或者,这可以在Visual Studio(于2019年测试)中完成,方法是转到txt文件的属性并设置Build Action: Embedded resource

答案 1 :(得分:0)

您可以使用链接。您需要将项目A中的链接添加到项目B中的文件:

<ItemGroup>  
  <Content Include="..\Project B\jsfiles\foo.js" Link="jsfiles\foo.js" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>  

尽管您必须使用这种方法创建指向文件夹中每个文件的链接。