如何在没有可编译代码的C#项目上使用MSBuild

时间:2009-11-19 23:07:29

标签: msbuild msbuildcommunitytasks

我有一个C#网络应用程序项目,其中实际上没有ASP.Net或C#。它只是一个带有一些Javascript,CSS和一些图像的html页面。

我想使用MSBuild将此应用程序的一个版本部署到具有缩小的JS和CSS的输出文件夹。

使用以下代码,我收到错误“CSC:致命错误CS2008:未指定输入”。我猜是因为没有实际的C#代码可以编译,但我不确定。

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
    <PropertyGroup>
        <CssTidy>..\build_tools\csstidy.exe</CssTidy>
    </PropertyGroup>

    <PropertyGroup>
        <DeploymentFolder>Test\</DeploymentFolder>
        <SourceProject>..\..\Test\Test.csproj</SourceProject>
    </PropertyGroup>

    <Import Project="Common.Web.targets" />

    <ItemGroup>
        <CssFiles Include="..\..\Test\CSS\stylesheet.css" />
        <ScriptFiles Include="..\..\Test\JavaScript\javascript.js"/>
    </ItemGroup>

    <Target Name="compress_css">
        <Attrib Files="%(CssFiles.FullPath)" ReadOnly="false"/>
        <Exec Command="$(CssTidy) %(CssFiles.FullPath) %(CssFiles.FullPath) --template=highest" />
    </Target>

    <Target Name="compress_js">
        <Attrib Files="%(ScriptFiles.FullPath)" ReadOnly="false"/>
        <JSCompress Files="%(ScriptFiles.FullPath)"></JSCompress>
    </Target>

    <Target Name="call_targets">
        <CallTarget Targets="compress_css"/>
        <CallTarget Targets="compress_js"/>
    </Target>
</Project> 

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:4)

您可以覆盖CoreCompile目标并在那里执行任何操作:<Target name="CoreCompile" />。这将跳过其活动并继续前进。您可能必须覆盖其他目标以避免错误。

答案 1 :(得分:1)

在文件的顶部,你有DefaultTargets =“Build”

将“Build”更改为“call_targets”,你应该好好去。

答案 2 :(得分:0)

“common.web.targets”里面有什么内容?我假设错误是从该文件中的目标(或其导入的其他目标)生成的。

答案 3 :(得分:0)

快速解决此问题的方法是向项目添加虚拟页面。之后构建将起作用。