9

私は最近、LuaスクリプトをC#プログラムで機能させるために、LuaInterfaceをいじり始めました。Visual Studio内からLuaスクリプトを簡単に作成するために、Lua構文強調表示プラグインをインストールし、アイテムテンプレートを作成して、プロジェクトファイルを右クリックし、[新しいアイテム]->[Luaスクリプト]を選択して新しいスクリプトを作成できるようにしました。これは非常にうまく機能します。

プログラムがスクリプトを見つけるには、ビルド場所と同じディレクトリ(またはサブディレクトリ)にスクリプトを配置する必要があります。これはまさに私が望む場所ですが、これを行うには、作成する新しいファイルごとに[出力ディレクトリにコピー]設定を変更する必要があります。

このオプションのデフォルト設定を変更する方法はありますか?現在、デフォルトで「コピーしない」になっています。本質的に同じことを尋ねる他の質問を1つだけ見つけることができましたが、そこで提供された唯一の答えは、同じ拡張子を持つすべてのファイルを定義された場所にコピーするビルド後のイベントを示唆していました。ターゲットの宛先が変更されたり、ターゲットが追加されたり(追加のイベントが必要になる可能性がありますか?)、ファイルごとにその設定を変更できるようにしたいので、これは実際には行いたくありません。

このオプションはファイルごとに手動で変更できるため、これは便利な問題ですが、残りのプロセスを自動化できたので、この最後の詳細も自動化できることを望んでいました。

4

1 に答える 1

4

テンプレートへの参照を追加できるはずです。これは、[ファイル]->[追加]ウィンドウIWizardをクリックすると実行されます。アセンブリとタイプをvstemplateファイルokに追加する必要があります。

RunFinishedまたは、場合によってはProjectItemFinishedGeneratingメソッドを実装します。次に、EnvDTEVisual Studioによって公開されたオブジェクトを使用して、標準のVisualStudioExtensibilityモデルを使用してソリューション内の任意のアイテムを操作できます。

次のコードスニピット(オープンソースのT4 Toolboxから)は、このプロパティを設定する方法を示しています。

    /// <summary>
    /// Sets the known properties for the <see cref="ProjectItem"/> to be added to solution.
    /// </summary>
    /// <param name="projectItem">
    /// A <see cref="ProjectItem"/> that represents the generated item in the solution.
    /// </param>        
    /// <param name="output">
    /// An <see cref="OutputFile"/> that holds metadata about the <see cref="ProjectItem"/> to be added to the solution.
    /// </param>
    private static void SetProjectItemProperties(ProjectItem projectItem, OutputFile output)
    {
        // Set "Build Action" property
        if (!string.IsNullOrEmpty(output.BuildAction))
        {
            ICollection<string> buildActions = GetAvailableBuildActions(projectItem);               
            if (!buildActions.Contains(output.BuildAction))
            {
                throw new TransformationException(
                    string.Format(CultureInfo.CurrentCulture, "Build Action {0} is not supported for {1}", output.BuildAction, projectItem.Name));
            }

            SetPropertyValue(projectItem, "ItemType", output.BuildAction);
        }

        // Set "Copy to Output Directory" property
        if (output.CopyToOutputDirectory != default(CopyToOutputDirectory))
        {
            SetPropertyValue(projectItem, "CopyToOutputDirectory", (int)output.CopyToOutputDirectory);
        }

        // Set "Custom Tool" property
        if (!string.IsNullOrEmpty(output.CustomTool))
        {
            SetPropertyValue(projectItem, "CustomTool", output.CustomTool);
        }

        // Set "Custom Tool Namespace" property
        if (!string.IsNullOrEmpty(output.CustomToolNamespace))
        {
            SetPropertyValue(projectItem, "CustomToolNamespace", output.CustomToolNamespace);
        }    
    }
于 2013-02-03T19:02:22.860 に答える