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

时间:2011-03-07 17:47:13

标签: .net svn web-deployment aspnet-compiler

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

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

当我有一个排除的ascx文件时,我的问题就出现了。这个文件是最新代码的一部分,但普通的构建编译器会忽略它,所以没问题。但是,Aspnet_compiler会爆炸,因为它找不到该特定控件的代码。

我不确定是否

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

我很感激任何帮助。

汤姆

4 个答案:

答案 0 :(得分: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"

答案 1 :(得分:3)

这是预期的: Aspnet_compiler.exe 编译应用程序中的所有文件,但不查看项目文件。因此,它没有任何被排除文件的概念。

Babak Naffas建议删除该文件可能是处理该文件最简单的方法,而不是每次都手动删除它(或删除它的脚本)。

答案 2 :(得分:1)

我这么久都在苦苦挣扎。但终于找到了解决方法

attrib +h folderToExclude & runAspComplierWithAllOptions & attrib -h folderToExclude

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

答案 3 :(得分:1)

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

此错误的典型案例是node_modules

创建的npm install文件夹

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

attrib +H node_modules

如果您从npm install项目运行msbuild,则可以添加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)">

attrib命令的exitcode总是为零,至少在我的测试中,所以检查它以确定命令是否成功运行是没有意义的。

在上一个msbuild示例中,要隐藏的文件夹是"$(PackageJsonFolder)\node_modules",因为属性PackageJsonFolderpackages.json文件所在的文件夹的名称,因此node_modules 1}}将被创建。

对于其他情况,您始终可以指定相对于项目位置的文件夹,如下所示:

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

并使用前一个示例中的相同石灰运行命令。