7

我最近開始使用LuaInterface來獲取Lua腳本,在我的C#程序中工作。爲了在Visual Studio中輕鬆創建Lua腳本,我安裝了一個Lua語法高亮插件並創建了一個項目模板,以便我可以通過右鍵單擊項目文件並選擇「New Item-> Lua Script」來創建新腳本。這工作得很好。在Visual Studio 2010中創建文件時是否可以自動設置「複製到輸出目錄」?

爲了讓程序找到腳本,它們需要放置在構建位置的同一目錄(或子目錄)中。這正是我想要的地方,但爲了做到這一點,我必須爲我創建的每個新文件更改「複製到輸出目錄」設置。

有沒有辦法改變這個選項的默認設置?現在它默認爲「不要複製」。我只能找到one other question要求基本相同的事情,但提供的唯一答案建議後生成事件複製具有相同擴展名的所有文件到定義的位置。我真的不想這樣做,因爲目標目標可能會改變,或者可能會添加更多目標(並且需要額外的事件?),我希望能夠根據每個文件更改該設置。

這只是一個方便的問題,因爲我可以爲每個文件手動更改該選項,但是已經能夠自動執行剩餘的過程,我希望能夠自動完成最後一個細節。

回答

4

您應該可以在該模板中添加IWizard引用,當您在文件 - >添加窗口中單擊ok時,將會運行該模板。你需要add the assembly and type到vstemplate文件。

執行RunFinished或可能的ProjectItemFinishedGenerating方法。然後,您可以使用由Visual Studio公開的EnvDTE對象來使用標準Visual Studio Extensibility模型處理解決方案中的任何項目。

The following code snippit(來自開放源代碼T4工具箱)顯示如何設置此屬性。

/// <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); 
     }  
    } 
+0

Thanks!這看起來好像可能有用,但是你碰巧有鏈接到示例或教程?我試圖按照http://msdn.microsoft.com/en-us/library/ms185301.aspx上的教程,但我發現它有點難以處理。我也很難找到控制「複製到輸出目錄」設置的選項。你提到了EnvDTE對象,所以我認爲它包含在EnvDTE.ProjectItem.Properties集合中。這是我第一次看編寫擴展名,看起來這個東西的文檔有點稀疏。 –

+0

從T4Toolbox開源項目中添加代碼示例 – jessehouwing

+0

工作得很好。該代碼示例非常有幫助。謝謝! –

相關問題