6

当我使用“添加现有项目”对话框中的“添加为链接”选项将另一个 Visual Studio 2012 项目中的文件添加到当前项目时。文件链接创建得很好,一切都很好。

当我对同一个VS2012 项目(但位于另一个文件夹中)中的现有文件重复相同的技巧时,不会创建链接。Visual Studio 只是忽略该操作。为什么这不可能?有没有解决方法,所以我可以将文件链接添加到同一个项目中的文件?

背景信息:我想使用 NuGet 包及其更新机制,但 NuGet 只是将所有内容转储到我不想使用的文件夹结构(如“脚本”和“内容”文件夹)中。我使用“libs”文件夹来存放外部内容。但是当我移动 NuGet 导入的文件时,它会破坏更新机制,所以我想创建文件链接(在 libs 文件夹下面)到位于“脚本”文件夹等中的导入文件。

我已经尝试手动编辑 .csproj 文件,但链接定义仍然被忽略。我能想到的唯一解决方案是为 NuGet 包创建另一个项目,并在我的另一个项目中添加指向这些导入文件的链接,但这在我看来有点矫枉过正。

4

3 回答 3

3

这是不可能的。

csproj 文件只是一个 msbuild 文件,它告诉构建过程哪些文件和引用构成了项目,以及在构建等方面要做什么。

如果您查看 csproj 文件的组合方式,您会注意到存在 ItemGroup 元素。这些 ItemGroup 元素的功能之一是将文件组合在一起。在“文件组”中,每个项目(无论标记为 Compile 还是 None 或其他)都引用具有 Include 属性的文件,例如 Include="filename.ext"。当您将文件添加到解决方案时,它将创建这些元素之一,并将 Include 属性适当地设置为文件相对于项目的路径。但在此之前,它会检查项目中是否已经存在具有匹配路径的文件,如果存在则忽略它。

所以你看,你想要做的是添加一个重复的文件,而 VS 不允许这样做。

- 编辑 -

现在,至于解决方法。如果您要使用符号链接,则可以这样做。在命令窗口中,键入以下命令:

mklink Link Target

其中 Link 指定新的符号链接名称,Target 指定新链接引用的路径(相对或绝对)。

然后,您应该能够根据需要将该文件添加到您的项目中。

于 2014-01-30T12:31:51.963 回答
2

您可以编辑 .csproj 文件。例如,替换

<Content Include="fonts\fontawesome-webfont.woff" />

经过

<Content Include="fonts\fontawesome-webfont.woff" >
   <Link>newPath\fonts\fontawesome-webfont.woff</Link>
</Content>

新路径将隐藏在解决方案资源管理器中,但会被复制(在 VS2015 CTP6 中测试)

于 2015-03-07T16:34:26.077 回答
-1

Visual Studio 与硬链接和软链接不兼容

于 2014-09-06T23:39:00.580 回答