Использование MSBuild - отличная идея. Тем не менее, если есть какие-либо потерянные файлы (файлы .cs не в .csproj), aspnet_compile.exe иногда завершится ошибкой. Чтобы обойти это, я написал следующее, чтобы удалить все файлы * .cs, которые не включены в .csproj. Пока все хорошо, любые отзывы приветствуются.
<project>
<foreach item="File" property="csprojFile">
<in>
<items>
<include name="source/**/*.csproj" />
</items>
</in>
<do>
<property name="currentFolder" value="${directory::get-current-directory()}" />
<property name="csprojParentFolder" value="${directory::get-parent-directory(csprojFile)}" />
<foreach item="File" property="csFile">
<in>
<items>
<include name="${csprojParentFolder}/**/*.cs"/>
</items>
</in>
<do>
<property name="csFileRelativePath" value="${string::replace(csFile, csprojParentFolder + '\', '')}" />
<loadfile property="projFile" file="${csprojFile}" />
<if test="${not string::contains(projFile, csFileRelativePath)}">
<echo message="${csprojFile}: | Missing: ${csFileRelativePath}" />
<!-- <delete file="${csprojParentFolder + '\' + csFileRelativePath}" /> -->
</if>
</do>
</foreach>
</do>
</foreach>
</project>