2012-05-16 66 views
1

我想用我的Web服務器之一編譯我的源代碼(或其中的一部分)編譯EXE或DLL(像一些網站提供的每日構建自己的程序)。因爲我希望我的程序由第三方進行定製,並且他們擁有自己的獨立應用程序,並在其中標識其徽標和一些自定義字符串。我更喜歡的解決方案將是一個DLL文件,將被加載到我的應用程序,所以我仍然可以更新主應用程序,同時保留第三方的定製。通過網絡服務器

因此,第三方去我的網站,進入一些領域和生成一個dll文件(或者你有任何其他更好方式做到這一點?)和dll文件將被包括在應用程序中,它將抓取標識資源和一些字符串,以便在應用程序中顯示。

這怎麼辦?我寧願使用Linux來構建它,但如果Windows更容易,那也不是問題。

+0

要使用持續集成軟件,谷歌爲它(CruiseControl的,詹金斯等) – CharlesB

回答

1

您可以使用CSharpCodeProvider API的是,這裏有一個例子:

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } }); 
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true); 
parameters.GenerateExecutable = true; 
CompilerResults results = csc.CompileAssemblyFromSource(parameters, 
@"using System.Linq; 
    class Program { 
     public static void Main(string[] args) { 
     var q = from i in Enumerable.Rnge(1,100) 
        where i % 2 == 0 
        select i; 
     } 
    }"); 

results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText)); 

如果你想使用Linux來看看Mono MCS C# Compiler

+0

這就要求編輯在客戶端上運行,我寧願做這個服務器端。 – Devator

+0

爲什麼這需要編譯在客戶端運行?在服務器端執行然後 – animaonline

+0

啊,我很抱歉,我沒有想到ASP.NET。感謝您的高舉。 – Devator

0

很容易在任何平臺上。只需將數據接收到模板C#文件(String.Replace將正常工作)。然後只需要編譯器。

+0

你可以在C#模板文件上進行選擇嗎?這是一些帶有一些字符串的文本文件嗎? – Devator

+0

是的,你知道了! –

0

如果你信任你的第三方供應商試圖通過JetBrains公司採用團隊市commiting在svn的文件夾中的一些變化,會導致項目的重新編譯,你會得到預編譯的項目。

+0

我沒有分享SVN,他們也不需要看代碼。只是一些字符串和一個標誌。 – Devator

+0

在這種情況下,我會用上傳功能製作一個gui頁面,並且使一些服務工具可以查看某些文件夾中的更改。一旦發生變化,只需重新編譯解決方案,添加資源。 –

+0

但是這將構建整個源代碼,如果我只是讓用戶創建一個dll文件,而不是這兩個將彼此獨立,所以如果我創建一個新版本,每個第三方不必重新構建完整的應用程序,相反,程序會自我更新,數據仍然可以從dll文件中檢索。 – Devator

0

這個怎麼樣

建立一個Web界面來捕獲第三方的定製到,比方說,一個數據庫。

建立一個持續集成服務器來管理自動化生成(例如Jenkins)。

然後在您的CI解決方案中實現自定義構建步驟以獲取定製,將它們放入源代碼副本中,並讓您的CI爲每個客戶端構建一個構建 - 將構建工件發佈到客戶端可以看到它們的地方說的某處網絡接口)

你可以設置你的CI服務器的自定義觸發,以觀看新的定製數據庫。或者通過Web UI中的某些操作來觸發。

+0

但是這會構建整個源代碼,如果我只是讓用戶創建一個dll文件,而不是這兩個將彼此獨立,所以如果我創建一個新版本,每個第三方不必重建完整的應用程序,相反,程序會自我更新,數據仍然可以從dll文件中檢索。 – Devator

+0

CI產品將只構建整個來源,如果這就是你所要做的。您可以輕鬆地將其配置爲僅編譯一個包含您拖入的資源的程序集,將其與參考產品版本(例如,覆蓋DLL)結合使用,將其打包到安裝程序中,並將其推回到Web服務器。 Web服務器不是編譯代碼的地方。 – tomfanning