我试图了解使用 Microsoft Build Engine(也称为 MSBuild)构建 C# 项目的过程,但我遇到了问题。问题很简单,我想我只是不明白一些事情。
我编写了一个由 2 个 .cs 文件组成的简单程序。第一个文件是“MathOp.cs”。在这个文件中,我定义了 2 个函数:add(double num1, double num2) 和 multiply(doble, double); 第二个文件是“Program.cs”。在这里,我定义了两个变量,我将它们传递给添加放在 MathOp 文件中的函数并获取 rezult;这个程序是正确的。
然后我编写了一个简单的 msbuild 文件,在其中定义了要构建的任务和目标。当我在 Visual Studio 命令提示符下启动它时,我得到错误 cs0234:在系统命名空间中找不到类型或命名空间名称 Linq。最有趣的是我在 msbuild 文件中引用了 System.dll 等。如果我在 Program.cs 文件中评论 using 指令,这个错误就会消失。
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<AssemblyInfo>Build</AssemblyInfo>
<builtdir>Build\</builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="msbuildTest\Program.cs"/>
<CSFile Include="msbuildTest\Properties\AssemblyInfo.cs"/>
<CSFile Include="msbuildTest\MathOp.cs"/>
<Reference Include="System.dll"/>
<Reference Include="System.Data.dll"/>
<Reference Include="System.Drawing.dll"/>
<Reference Include="System.Windows.Forms.dll"/>
<Reference Include="System.XML.dll"/>
</ItemGroup>
<Target Name="PreBuild">
<Exec Command="if not exist $(builtdir) md $(builtdir)"/>
</Target>
<Target Name="Compile" DependsOnTargets="PreBuild">
<Csc Sources="@(CSFile)"
References="@(Reference)"
OutputAssembly="$(builtdir)$(MSBuildProjectName).exe"
TargetType="exe"/>
</Target>
<Target Name="Clean" >
<Exec Command="DEL $(builtdir)$(AssemblyInfo).exe"/>
</Target>
<Target Name="Rebuild" DependsOnTargets="Clean;Compile"/>