我有一个取决于项目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中时仍能正常工作的正确方法?
基本上,我只是在寻找在项目中包含其他资源的正确方法。
答案 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>
尽管您必须使用这种方法创建指向文件夹中每个文件的链接。