已經建立好的自訂頁面,
現在我們要為這些頁面上Action,
而WixToolset有專門自訂動作的專案檔Custom Action Project for Wix v3
我們建立一個DemoUse.CustomAction專案
建立好了以後我們看CustomAction,我已經改成叫SetCustomAction了
其中傳入參數Session 就是由剛剛 WixToolset 內設定的自訂屬性,
目前可以使用的參數
1.SYSTEMIP -我們自訂頁面
2.WEBPORT -我們自訂頁面
3.INSTALLFOLDER -由選擇路徑頁面得到的
而抓取資料的方式就session["xxx"]這樣使用
var webPort = session["WEBPORT"];
假設我們要針對Json文字檔做編輯
網路上抓的文字檔撰寫
public class TxtEditer
{
private string PATH;
public TxtEditer(string path)
{
PATH = path;
}
/// <summary>
/// 取得文字檔資料
/// </summary>
/// <returns></returns>
public string GetTxtData()
{
var result = string.Empty;
using (StreamReader reader = new StreamReader(PATH, System.Text.Encoding.Default))
{
result = reader.ReadToEnd();
}
return result;
}
/// <summary>
/// 完全覆蓋文字檔
/// </summary>
/// <returns></returns>
public void EditTxtData(string txt)
{
using (StreamWriter writer = new StreamWriter(PATH, false, System.Text.Encoding.Default))
{
writer.Write(txt);
}
}
}
Json檔了話可以用Json套件,
懶的話直接轉JObject,
大略這樣寫….
[CustomAction]
public static ActionResult SetCustomAction(Session session)
{
//可使用的參數
var path = Path.Combine(session["INSTALLFOLDER"], "appsettings.json");
var systemIP = session["SYSTEMIP"];
var webPort = session["WEBPORT"];
//編輯Json檔
var txtEditer = new TxtEditer(path);
string txt = txtEditer.GetTxtData();
var config = JsonConvert.DeserializeObject<JObject>(txt);
config["URL"] = $"{systemIP}:{webPort}";
txt = JsonConvert.SerializeObject(config, Formatting.Indented);
txtEditer.EditTxtData(txt);
return ActionResult.Success;
}
確定後明天再來將他們結合在一起
這就考驗你各位的程式底子了
因為沒辦法直接使用F5,
而我是使用LINQPad在旁邊做輔助…嘿嘿
Day8程式碼
https://github.com/Aslan7826/defaultMVC/commits/Day08