如何使用aspnet_compiler处理被排除的文件?

10

我正在尝试使用aspnet_compiler将已编译的项目从一个位置移动到另一个位置。我正在使用Subversion进行版本控制。

该过程基本上是从Subversion获取所有代码,进行构建,然后调用aspnet_compiler。

我的问题出现在我有一个已排除的ascx文件时。这个文件是最新代码的一部分,但普通的构建编译器忽略它,所以没有问题。然而,Aspnet_compiler会崩溃,因为它找不到特定控件的代码后端。

我不确定:

  • 我是否做得对;
  • 是否有一种方法可以仅从Subversion获取正确的文件树
  • 是否有更简单的方法;或者
  • 这是预期的,我需要每次删除已排除的文件。

我会感激任何帮助。

汤姆


如果您不再需要ASCX控件,为什么不将其删除呢?使用Subversion,您仍然可以通过旧版本获取到文件。 - Babak Naffas
我们已经从解决方案中删除了它,但是当我们使用Subversion获取项目时,它会获取所有文件,包括未使用的文件。 - Tom Moseley
4个回答

10

从.NET 4.5或4.5.1开始(我不确定是哪一个版本),aspnet_compiler.exe增加了-x选项,允许您排除目录进行编译。您可以通过命令“aspnet_compiler /?”找到该选项。

-x            The virtual path of a directory that should be excluded from precompilation.
This switch can be used multiple times.

示例:

我的网站中有一个名为"ToBeExcluded"的文件夹。我可以使用以下命令预编译网站并排除该文件夹:

aspnet_compiler -v /foo -p "C:\MyWebsite" -x ToBeExcluded "c:\temp\web"

这个命令 -x ToBeExcluded "c:\temp\web" 是否也适用于文件...例如 -x ToBeExcluded "c:\temp\web\myfile.rdlc"? - Gwasshoppa

3
这是预期的结果: Aspnet_compiler.exe 编译应用程序中的所有文件,不会查看项目文件。因此,它没有任何关于排除文件的概念。
Babak Naffas的建议删除文件可能是处理文件最简单的方法,而不是每次手动删除它(或编写脚本来删除它)。

2

有一种非常简单的方法:将隐藏属性设置为要排除的文件夹,aspnet_compiler 将跳过它。

这个错误的典型案例是由 npm install 创建的 node_modules 文件夹。

如果你从脚本或命令行运行 npm install,则可以在运行 nmp install 后运行 attrib 命令来隐藏该文件夹:

attrib +H node_modules

如果您在msbuild项目中运行npm install,可以添加一个exec任务,如下所示:
<PropertyGroup>
    <HideFolder>attrib +H "$(PackageJsonFolder)\node_modules"</HideFolder>
</PropertyGroup>
<!-- next line is for debugging, remove it when finished -->
<Warning Text="Hide node_modules command: '$(HideFolder)'"/>
<Exec Command="$(HideFolder)">
< p > 在我的测试中,attrib命令的退出码始终为零,因此检查它是否成功运行是没有意义的。

在之前的 msbuild 示例中,要隐藏的文件夹是 "$(PackageJsonFolder)\node_modules" ,因为属性 PackageJsonFolderpackages.json 文件所在的文件夹的名称,因此也就是 node_modules 将被创建的位置。

对于其他情况,您可以始终相对于项目的位置指定文件夹,像这样:

<HideFolder>attrib +H "$(MSBuildProjectDirectory)\folder\to\hide"</HideFolder>

并使用前面示例中的相同命令运行。


2

我曾经为此苦苦挣扎很长时间,但最终找到了一个解决方法。

attrib +h folderToExclude & runAspComplierWithAllOptions & attrib -h folderToExclude

隐藏文件夹 -> 编译 -> 显示文件夹。

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