0

Microsoft Build Engine (MSBuild とも呼ばれます) を使用して Bulding C# プロジェクトのプロセスを理解しようとしていますが、問題に直面しています。問題は単純です。私は何かを理解していないと思います。

2 つの .cs ファイルから構成される単純なプログラムを作成しました。最初のファイルは「MathOp.cs」です。このファイルでは、2 つの関数を定義します: add(double num1, double num2) とmultiply(doble, double); 2 番目のファイルは「Program.cs」です。ここで、MathOp ファイルに配置された関数を追加して結果を取得するために渡した 2 つの変数を定義します。このプログラムは正しいです。

次に、ビルドのタスクとターゲットを定義する単純な 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"/>

4

1 に答える 1

2

現在の状態では、msbuild はLinq について何も知らない.Net 2.0のCSC を使用します。

この問題を修正する最も簡単な方法は、msbuild プロジェクトで 4.0 バージョンを指定して、msbuild で正しい CSC バージョンを使用するように強制することです。

<Project ToolsVersion="4.0"
    DefaultTargets="Compile"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
于 2013-04-01T14:02:43.223 に答える