如何在使用VS2010的发布工具时包含被忽略的文件?

23
我在我的asp.net mvc项目中有一个目录/media/fonts,其中包含了网站使用的字体。但当我使用Visual Studio中的"发布"工具时,该文件夹被忽略掉了,尽管它已经包含在我的项目中。其他文件夹如/media/images/media/css则可以正常包含。
是否有任何方法告诉Visual Studio在发布时不要忽略这个文件夹呢?

你可以指定要包括在发布中的文件类型吗? - Phil C
.eot、.woff、.ttf 和 .svg 是字体文件夹中的文件扩展名。 - jessegavin
3个回答

44

选择您的字体文件并从属性窗口更改构建操作为内容。


这样做可以立即解决问题,但未来可能会遗漏文件——请参考我的答案以获得永久解决方案。 - Chris Moschini
看起来你可能还需要将“复制到输出目录”设置为“始终复制”或“仅在更新时复制”。 - Dave Nichol
我正在使用2015版本,尝试了这个方法以及@ChrisMoschini的建议,并设置了“始终复制”...但是字体文件仍然被MSBuild忽略。 - Will Strohl
@WillStrohl 我也曾经按照上述步骤操作后认为我的字体文件被忽略了。事实证明,如果您使用像 .woff 这样的字体文件,则需要在 web.config 中指定 mimetype:<system.webServer> <staticContent> <remove fileExtension=".woff" /> <mimeMap fileExtension=".woff" mimeType="application/font-woff" /> </staticContent> </system.webServer>如果您不这样做,文件将被发布,但仍会收到 404 错误。P.S. 晚来一步,但今天偶然发现这个问题,希望能帮到其他人。 - Arjan

27
您可以通过修改字体文件扩展名的默认“Build Action”(构建操作)来永久解决此问题(.eot、.ttf等)。 http://blog.andreloker.de/post/2010/07/02/Visual-Studio-default-build-action-for-non-default-file-types.aspx 该链接已经被时间残忍地抹去,所以这里复制粘贴了其内容:
文件类型的默认构建操作可以在注册表中配置。但是,我们不需要手动修改注册表,因为有更好的方法:pkgdef 文件(一篇有关 pkgdef 文件的好文章)。本质上,pkgdef 是类似于 .reg 文件的配置文件,它定义了在真实注册表的正确位置自动合并的注册表键和值。如果删除了 pkgdef 文件,则更改会自动撤消。因此,您可以安全地修改注册表,而不用担心破坏任何东西——或者至少很容易撤销损坏。
最后,这里是一个示例,说明如何更改文件类型的默认构建操作:
[$RootKey$\Projects{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\FileExtensions.spark]
"DefaultBuildAction"="Content"

关键字中的 Guid 指的是项目类型。在这种情况下,{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 表示“C# 项目”。可以在这里找到一个相当全面的项目类型 GUID 列表。虽然它没有明确涵盖 Visual Studio 2010,但这些 GUID 同样适用于当前版本。顺便说一句,我们可以使用 C# 作为此处的项目类型,因为基于 C# 的 MVC 项目实际上是 C# 项目(以及 Web 应用程序项目)。对于 Visual Basic,您应使用 {F184B08F-C81C-45F6-A57F-5ABD9991F28F}

$RootKey$ 是一个抽象出来的真实注册表键,Visual Studio 将其配置存储在其中:

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0_Config

(注意:不要尝试手动编辑此键下的任何内容,因为它可以在任何时候被 Visual Studio 覆盖。)

其余部分应该是自解释的:此选项将 .spark 文件的默认构建操作设置为“Content”,因此这些文件包含在发布过程中。

现在,您需要做的就是将此文本放入扩展名为 pkgdef 的文件中,并将其放在某个位置下。

%PROGRAMFILES(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\Extensions

(在64位系统上)或者

%PROGRAMFILES(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\Extensions

(在32位系统上)Visual Studio将自动加载并应用设置,下次启动时生效。要撤销更改,只需删除这些文件即可。


加油!非常感谢您的评论。我希望我能给您投2票。 - jessegavin
我正在使用VS 2015尝试了这个方法,但它没有起作用。此外,我的字体文件已经标记为内容。虽然我喜欢这个解决方案。 - Will Strohl
@WillStrohl 这个修复方法适用于2010-2013版本。我目前没有使用2015版本,所以无法在那里进行测试。如果您确定它在那里失败了,可能值得在Microsoft正在开发2015版本时与他们联系。 - Chris Moschini
@ChrisMoschini 感谢您跟进评论。这实际上是我的错。我使用的 MSBuild 文件没有包含文件扩展名。 - Will Strohl
1
链接已经失效。这就是为什么发布仅包含链接的答案是一个不好的主意。 - Lews Therin
显示剩余2条评论

-2

Visual Studio可以发布字体文件。在一个特殊的情况下,我们将扩展名从.ttf重命名为.jpg,然后它们就被发布了。


1
唉,这个解决方法不太理想。我会看看是否有其他人发布了另一个解决方案。感谢你的回答。 - jessegavin
1
我之前不知道正确的方法,现在通过获得负面声誉知道改变构建操作就可以解决问题了! - Afshar Mohebi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接