在由 Visual Studio 或 SharpDevelop 编写的 C# 项目文件中,不位于项目文件夹层次结构中的文件可以包含在<Link>
元素中。1
我的目录结构如下所示:
[SolutionDirectory]
|- [MyProject]
| |- TestProj.csproj
|- [File]
| |- somefile.txt
|- TestProj.sln
因此,在TestProj.csproj中,我可以添加以下内容:
<ItemGroup>
<EmbeddedResource Include="..\File\somefile.txt">
<LogicalName>MyResource</LogicalName>
<Link>somefile.txt</Link>
</EmbeddedResource>
</ItemGroup>
这完美无缺,并且somefile.txt作为资源嵌入。SharpDevelop 4.4 显示的项目树如下:
但是,为了使事情更整洁,我想在TestProj.csproj的文件夹层次结构中组织像somefile.txt这样的文件。我尝试了以下方法:
只是适应<Link>
:
<ItemGroup>
<EmbeddedResource Include="..\File\somefile.txt">
<LogicalName>MyResource</LogicalName>
<Link>File\somefile.txt</Link>
</EmbeddedResource>
</ItemGroup>
声明所需名称的文件夹:
<ItemGroup>
<EmbeddedResource Include="..\File\somefile.txt">
<LogicalName>MyResource</LogicalName>
<Link>File\somefile.txt</Link>
</EmbeddedResource>
<Folder Include="File" />
</ItemGroup>
将实际文件夹声明为链接:
<ItemGroup>
<EmbeddedResource Include="..\File\somefile.txt">
<LogicalName>MyResource</LogicalName>
<Link>File\somefile.txt</Link>
</EmbeddedResource>
<Folder Include="..\File">
<Link>File</Link>
</Folder>
</ItemGroup>
所有这些都产生相同的结果:项目中的文件夹结构显示为所需的,但是,File 文件夹标有黄色感叹号警告标志,暗示有些事情不太正确:
我发现让这个警告符号消失的唯一方法是在项目目录中实际创建一个额外的文件夹:
[SolutionDirectory]
|- [MyProject]
| |- [File]
| |- TestProj.csproj
|- [File]
| |- somefile.txt
|- TestProj.sln
从这里可以看出,这个额外的File 文件夹将保持为空,并且空目录只有在 Git 等版本控制系统的变通方法中才有可能。(可能相同的限制适用于某些存档格式。)
因此,我仍在努力寻找更好的解决方案:如何链接到项目文件夹结构之外的文件,并将它们分类到项目中的空文件夹层次结构中?
不幸的是,MSDN 上的 MSBuild Schema Reference甚至没有提到该<Folder>
元素,因此我无法通过文档找到有关该问题的任何信息。
1:通常,这用于在多个项目中包含文件。在我的特殊情况下,我正在处理一个需要在同一解决方案中引用类库的项目,但它还需要包含该类库的整个源代码(包括项目文件等)作为嵌入式资源。