MSBuild, benutzerdefinierte Task zum Ausführen eines benutzerdefinierten Tools zum Generieren von Klassen für das Linq to SQL-Modell?

Ich habe das folgende Szenario. Wir verwenden gespeicherte Prozeduren, um auf die Datenbank zuzugreifen, und wir verwenden LiNQ 2 SQL, um die Klassen zu generieren, oder wir verwenden UnpluggedLINQ to SQL Generator dafür. Es wurde als benutzerdefiniertes Tool ausgeführt, aber das Unterscheiden der generierten Klassen ist ein großes Problem. Wir möchten die Klassen automatisch generieren, aber von der Versionskontrolle ausschließen, damit ich mich auf die Aufgabe stelle, eine msbuild-Aufgabe zu erstellen. Gefundendieser Beitra unddieser Beitra aber ich kann das nicht alleine lösen. Ich habe Code hinzugefügt. Die Aufgabe sieht folgendermaßen aus:

public class GenerateDesignerDC : Task
{
    public ITaskItem[] InputFiles { get; set; }
    public ITaskItem[] OutputFiles { get; set; }

    public override bool Execute()
    {
        var generatedFileNames = new List<string>();
        foreach (var task in InputFiles)
        {

            string inputFileName = task.ItemSpec;
            string outputFileName = Path.ChangeExtension(inputFileName, ".Designer.cs");
            string result;

            // Build code string
            var generator = new ULinqCodeGenerator("CSharp");
            string fileContent;
            using (FileStream fs = File.OpenRead(inputFileName))
            using (StreamReader rd = new StreamReader(fs))
            {
                fileContent = rd.ReadToEnd();
            }

            using (var destination = new FileStream(outputFileName, FileMode.Create))
            {
                byte[] bytes = Encoding.UTF8.GetBytes(generator.BuildCode(inputFileName, fileContent));
                destination.Write(bytes, 0, bytes.Length);
            }
            generatedFileNames.Add(outputFileName);
        }

        OutputFiles = generatedFileNames.Select(name => new TaskItem(name)).ToArray();

        return true;
    }
}

Nun versuche ich, ein benutzerdefiniertes Ziel namens custom.target @ hinzuzufüg

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <CoreCompileDependsOn>$(CoreCompileDependsOn);GenerateToolOutput</CoreCompileDependsOn>
    </PropertyGroup>
    <UsingTask TaskName="BuildTasks.GenerateDesignerDC" AssemblyFile="BuildTasks.dll" />
    <Target Name="GenerateToolOutput" Inputs="@(dbml)" Outputs="@(dbml->'$(IntermediateOutputPath)%(FileName).designer.cs')">
        <GenerateDesignerDC InputFiles="@(dbml)" OutputFiles="@(dbml->'$(IntermediateOutputPath)%(FileName).designer.cs')">
            <Output ItemGroup="Compile" TaskParameter="OutputFiles" />
        </GenerateDesignerDC>
    </Target>
</Project>

Ich füge der Projektdatei auch die erforderlichen ItemGroups wie folgt hinzu:

<ItemGroup>
    <AvailableItemName Include="dbml" />
</ItemGroup>
<ItemGroup>
    <Compile Include="@(dbml)" />
</ItemGroup>

Und schließlich füge ich dem Projekt die folgenden Dateien hinzu:

<dbml Include="DAL\SettingsDC.dbml">
    <SubType>Designer</SubType>
    <Generator>ULinqToSQLGenerator</Generator>
    <LastGenOutput>SettingsDC.designer.cs</LastGenOutput>
</dbml>

Dies verursacht eine Fehlermeldung mit der Aufschrift

Die Task "GenerateDesignerDC" hat eine ungültige Ausgabespezifikation. Das Attribut "TaskParameter" ist erforderlich, und entweder das Attribut "ItemName" oder "PropertyName" muss angegeben werden (jedoch nicht beide).

Was muss ich tun, damit das funktioniert?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage