1. 如何在Visual Studio中利用命令行集成Dotfuscator混淆處理
首先在Visual Studio中打開Dotfuscator:點擊菜單欄中的 工具 > PreEmptive Protection - Dotfuscator 打開Dotfuscator。
此處默認新建了Dotfuscator項目,建議先進行保存,將文件保存至你要混淆項目的解決方案文件夾中,如,個人保存的位置為: E:/Projects/OpenSourceProject/ReferenceDoc/Dotfuscator/Samples/DotfuscatorSample/DotfuscatorSample.xml
保存到解決方案文件夾並非必須,此處如此處理可以為了後面進一步處理更加方便。
添加待混淆文件,如圖所示:
修改文件路徑,將文件路徑修改為如下圖所示:點擊 屬性 ,查看 項目屬性 - configdir (就是之前的保存位置),然後切換回 輸入 ,點擊輸入中第三個按鈕 編輯輸入 (那支筆),將路徑中與 configdir 匹配的部分替換為 ${configdir} (注意是大括弧)。
處理此步驟亦不是必須的,這樣處理的原因是為了讓我們的配置與本地無關(相對路徑),方便其他人合作使用。
至此,基本配置就可以了,點擊生成項目就可以進行混淆了。至於其他更多配置見官方文檔。
本地可以直接在Dotfuscator工具中點擊菜單欄中的 幫助 > 幫助目錄 (此為中文文檔,基礎的配置基本都有)。
幫助文件本地目錄參考(中文幫助): C:/Program Files (x86)/Microsoft Visual Studio 14.0/PreEmptive Solutions/Dotfuscator and Analytics Community Edition/zh-Hans
配置Visual Studio命令調用Dotfuscator 主要操作就是編輯生成後事件:右擊項目 屬性 ,切換到 生成事件 頁面,編輯 後期生成事件命令行 ,添加如下代碼:
此處為了保證只有在Release的模式下使用混淆,故添加了Release判斷。
if $(ConfigurationName)==Release "C:/Program Files (x86)/Microsoft Visual Studio 14.0/PreEmptive Solutions/Dotfuscator and Analytics Community Edition/dotfuscatorcli.exe" /q "$(SolutionDir)DotfuscatorSample.xml"
代碼解釋:dotfuscator命令行工具+參數+項目混淆配置文件;其中配置文件之前保存到解決方案文件夾下,故此出可以直接用解決方案文件目錄來索引。
代碼中唯一不足就是命令行工具使用了絕對路徑,vs中的宏參數沒有可以直接使用的,若讀者有啥好方法將此變為相對路徑,望通知。 —— 但關於系統中添加環境變數的法子就不要了,個人不喜。
如果你在此處下一步需要進一步的打包處理,而你又需要Debug模式下一樣可以打包測試。如,本人使用WiX打包,需要配置文件路徑,方便一點就是要配置為生成路徑,但是release模式下,需要將混淆的打包進去,而非直接生成的文件。此時,你不能改打包配置(改路徑的話,debug會用不了),所以,你需要在將混淆過的文件拷貝到原來的release生成目錄。所以我最後完整的生成事件就是如下代碼了:
注意:經測試,如果在Dotfuscator中將生成路徑設為文件來源路徑,可以生成還會自動覆蓋,但軟體會用不了,具體原因不明。
if $(ConfigurationName)==Release "C:/Program Files (x86)/Microsoft Visual Studio 14.0/PreEmptive Solutions/Dotfuscator and Analytics Community Edition/dotfuscatorcli.exe" /q "$(SolutionDir)DotfuscatorSample.xml" if $(ConfigurationName)==Release x /e /y "$(SolutionDir)Dotfuscated/*.*" "$(TargetDir)"
代碼中的目錄可以見Dotfuscator配置的生成目錄:
2. 如何:指定預先生成和後期生成命令行
更新:2007 年 11 月如果必須在生成和部署資料庫項目之前或之後執行操作,可以通過指定預先生成或後期生成命令行來執行這些操作。可以通過使用項目屬性來指定這些命令行。例如,在以下情況下可以使用預先生成或後期生成命令行:(預先生成)將 .sql 文件從 SQLCLR 項目復制到架構對象中,以便資料庫項目和 SQLCLR 項目同步。(後期生成)實現生成結果、壓縮生成結果或者運行 XSD.EXE 以更新 DataSet 類。指定預先生成命令行在「解決方案資源管理器」中,右擊要為其指定預先生成命令行的資料庫項目,再單擊「屬性」。在「項目屬性」窗口中單擊「生成事件」選項卡。執行下列操作之一:如果已知要執行的命令行,請在「預先生成事件命令行」中鍵入要在生成資料庫項目之前執行的命令行,然後轉到步驟 5。如果要使用生成宏,請單擊「編輯預先生成事件」。在「預先生成事件命令行」對話框中,鍵入要執行的命令行。可以單擊列表中的宏並單擊「插入」將其插入到命令行中。在完成命令行的編輯之後,請單擊「確定」。在「文件」菜單上,單擊「保存選定項」保存對項目屬性進行的更改。下次生成資料庫項目時,該命令行將在生成資料庫項目之前執行。指定後期生成命令行在「解決方案資源管理器」中,右擊要為其指定後期生成命令行的資料庫項目,再單擊「屬性」。在「項目屬性」窗口中單擊「生成事件」選項卡。執行下列操作之一:如果知道要執行的命令行,請在「後期生成事件命令行」中鍵入資料庫項目生成後要執行的命令行,然後轉到步驟 5。如果要使用生成宏,請單擊「編輯後期生成事件」。在「後期生成事件命令行」對話框中,鍵入要執行的命令行。可以單擊列表中的宏並單擊「插入」將其插入到命令行中。在完成命令行的編輯之後,請單擊「確定」。如果希望僅在生成成功時才運行命令行,請在「運行後期生成事件」列表中,單擊「成功生成時」。如果希望命令行總是運行(即使生成失敗時),請在「運行後期生成事件」列表中,單擊「總是」。在「文件」菜單上,單擊「保存選定項」保存對項目屬性進行的更改。下次生成資料庫項目時,該命令行將在生成資料庫項目之後執行。請參見任務如何:准備資料庫生成腳本如何:將更改部署到新資料庫或現有資料庫概念資料庫項目設置概述參考預生成事件/生成後事件命令行對話框 (Database Edition)
3. 如何使用cudaMallocPitch和cudaMemcpy2D
有時候,我們需要在比較大的項目中調用CUDA,這就涉及到MFC+CUDA的環境配置問題,以矩陣相乘為例,在MFC中調用CUDA程序。我們參考羅振東[email protected](國防科學技術大學計算機學院)的方法。
環境: Windows 7 SP1
Microsoft Visual Studio 2010
CUDA 5.0
步驟:
1.首先建立一個空的名叫Matrix Multiplication_KahanMFC的「FCM應用程序」項目:
點擊「確定」,這時彈出如下窗口
我們需要對默認項目進行一些修改,點擊「下一步」,我們設置一個空的MFC項目,選擇「單個文檔」和「MFC標准」:
點擊「完成」。
2.創建CUDA的調用介面函數及其頭文件
(1)頭文件
「添加」--> 「新建項」-->「Visual C++」-->「頭文件(.h)」-->「名稱」-->「CUDA_Transfer.h」 -->「添加」,如下圖:
在CUDA_Transfer.h中添加如下代碼:
//CUDA_Transfer.h
#include
#include "math.h"
using namespace std;
int run_cuda(float* GPU, float* CPU);
如下圖所示:
(2)函數
按照和增加頭文件相似的方法,添加函數。「添加」--> 「新建項」-->「Visual C++」-->「C++文件(.cpp)」 -->「名稱」-->「CUDA_Transfer.cpp」 -->「添加」,如下圖:
在CUDA_Transfer.cpp中添加如下代碼:
//CUDA_Transfer.cpp
#include "CUDA_Transfer.h"
#include "stdafx.h"
extern "C" int runtest(float* GPU, float* CPU);
int run_cuda(float* GPU, float* CPU)
{
runtest(GPU,CPU);
return 0;
}
如下圖所示:
需要注意的是在MFC的文件中是不能包含(include).cu文件的,會報錯,所以我們使用extern "C"的方式來實現函數的調用。
3. 創建存放cuda 代碼的篩選器,名為CUDA
「添加」--> 「新建篩選器」,重命名為CUDA
4. 在篩選器CUDA中創建一個CUDA源代碼文件,kernel.cu。
我們直接把已經寫好的矩陣相乘的程序kernel.cu復制到項目目錄下,添加到CUDA篩選器中去。
添加」--> 「現有項」-->「kernel.cu」--> 「添加」:
把kernel.cu的int main()函數改為extern "C" int runtest(float* GPU, float* CPU),兩個參數用來獲得GPU和CPU計算所使用的時間,單位為毫秒。
5. 右擊項目-->「生成自定義」:
在彈出的窗口中勾選CUDA 5.0(.target,.props)。如果使用其他版本的CUDA,就勾選對應的版本:
點擊「確定」。
6. 修改 kernel.cu的編譯鏈接設置
在解決方案資源管理器中右擊kernel.cu文件-->「屬性」,在彈出窗口中-->「常規」-->「項類型」的下拉列表中選擇
點擊「應用」後,「常規」下方會出現一個「CUDA C/C++」的設置,沒有特殊需求,不需要修改,點擊「確定」。
7.修改工程設置。
工程設置需要修改「鏈接器」-->「輸入」-->「附加依賴項」和「生成事件」-->「預先生成事件」-->「命令行」。需要設置的參數比較多,我們採用比較簡單的方法。
我們新建一個空的CUDA項目,在這個空CUDA項目的項目屬性中找到「鏈接器」-->「輸入」-->「附加依賴項」,把「附加依賴項」中所包含的項復制到我們的MFC項目中:
按照同樣的方法,設置「生成事件」-->「預先生成事件」-->「命令行」:
設置完成後,點擊「確定」。
8.修改MFC文件,完成調用。
我們需要在MFC中調用CUDA程序,顯示出GPU和CPU計算兩個1024*1024矩陣相乘所消耗的時間。
在Matrix Multiplication_KahanMFCView.cpp中包含(include)"CUDA_Transfer.h"
文件;在CMatrixMultiplication_KahanMFCView::OnDraw(CDC* pDC)中添加如下代碼:
float GPU;
float CPU;
run_cuda(&GPU, &CPU);
CString strGPU,strCPU;
strGPU.Format(_T("GPU:%f \n"),GPU);
strCPU.Format(_T("CPU:%f \n"),CPU);
pDC->TextOut(0,0,strGPU);
pDC->TextOut(0,30,strCPU);
如圖所示:
然後重新生成解決方案,運行。
計算要花費一些時間,需要等待,測試的時候可以把矩陣大小改小一些。因為把程序加到了OnDraw中,所以每當刷新窗口時候(例如調整窗口大小時),都會調用。由於計算耗時比較長,窗口看起來會像無響應一樣,等計算完成就好了。
運行的結果如下:
在矩陣比較大的情況下,GPU的加速效果明顯,GPU耗時只需要620ms,而CPU需要23438ms,要花費將近40倍的時間。
4. 請問大家一般用visual studio的命令提示符做些什麼事呢
手動編譯和鏈接程序.
這個程序作為外部程序,整合到vs上.以前如果接觸腳本的話,象python,lua都是通過這種方式掛接到vs上,其程序生成,你仍然可以用命令行方式來控制.
共同點:命令行,這利於進於事務處理.關於它的使用不僅限如此.
在項目屬性中,有一個"生成事件"",名稱夠"事務"了吧,在這里你可以用命令行,對生成後的或是生成前的數據進行操作.這個非常有用.
5. vs2008編譯成功,生成mt.exe時出錯
建議把編譯時輸出的錯誤信息全部貼上來,你給的信息太少,大家只能猜
請看看你的項目設置中的「生成事件」下的幾個選項中的「命令行」項內容是否正確,把它清空試試
附MSDN解釋:
Visual C++ 概念:生成 C/C++ 程序
項目生成錯誤 PRJ0003
錯誤消息
生成「command line」時出錯。
由「屬性頁」對話框中的用戶輸入形成的命令 command line 返回了一個錯誤代碼,但輸出窗口中不顯示任何信息。
此錯誤的可能原因為:
項目依賴於 ATL Server。從 Visual Studio 2008 開始,ATL Server 不再包括在 Visual Studio 中,但已在 CodePlex 作為共享源代碼項目發布。若要下載 ATL Server 源代碼和工具,請轉到 http://go.microsoft.com/fwlink/。
系統資源不足。關閉一些應用程序以解決此問題。
沒有足夠的安全特權。驗證是否有足夠的安全特權。
VC++ 目錄中指定的可執行路徑不包括您正嘗試運行的工具的路徑。
對於生成文件項目,缺少要在「生成命令行」或「重新生成命令行」上運行的命令。
6. 如何:預生成視圖以改善查詢性能(實體框架)
實體框架 在第一次執行查詢時生成視圖,然後在 ObjectContext 實例的生存期內維護這些視圖。視圖生成是執行單個查詢的總開銷的重要部分,因此 實體框架 讓您可以預生成這些視圖並在已編譯項目中包含這些視圖。除了生成和驗證 EDM 映射和模型文件之外,EDM 生成器 (EdmGen.exe) 工具還用於預生成這些視圖。本主題演示如何使用 EdmGen.exe 預生成 School 模型的視圖,並將視圖文件添加到項目。School 模型是在 實體框架 快速入門中創建的。最後的過程向您演示如何將模型和映射文件作為嵌入的資源重新添加到一個 ASP.NET Web 應用程序。注意本主題中的過程使用 Visual Studio 中的生成前和生成後事件,在 ASP.NET 網站中不支持這些事件。若要為 ASP.NET 網站所使用的一個 EDM 預生成視圖,應在單獨的類庫中創建該 EDM,對該類庫項目使用下面的過程,並在 ASP.NET 網站項目中引用該類庫項目。或者,可考慮使用 ASP.NET Web 應用程序項目而不是 ASP.NET 網站。這使您可以通過使用本主題中的過程,在與 ASP.NET Web 應用程序相同的項目中包含預生成的視圖。預生成的視圖在運行時進行驗證,以確保這些視圖與當前版本的 EDM 保持一致。此過程確保這些視圖與 EDM 匹配。如果生成過程正在輸出目錄中生成模型和映射文件,則可以跳過第一個過程。本主題中的過程使用 School 模型。可以通過完成快速入門(實體框架) 生成此模型。注意執行本主題中的過程需要 Visual Studio 2008 Service Pack 1 (SP1)。在輸出目錄中生成 School 模型的模型和映射文件在「解決方案資源管理器」中,雙擊 School.edmx 文件。這會在「實體設計器」中顯示 School 模型。在「模型瀏覽器」中,選擇 SchoolModel 模型並將「元數據項目處理」更改為「復制到輸出目錄」。這可確保在輸出目錄中生成模型和映射文件。生成解決方案。這會在輸出目錄中生成模型和映射文件。向Visual Basic 項目添加視圖生成在「解決方案資源管理器」中,選擇要為其指定生成事件的項目。在「項目」菜單上,單擊「項目屬性」。在「屬性」頁中,單擊「編譯」選項卡。單擊「生成事件」按鈕。在「生成事件」對話框中,添加下面的預生成事件(無換行符): "%windir%\Microsoft.NET\Framework\v3.5\EdmGen.exe" /nologo /language:VB /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" "/outviews:$(ProjectDir)School.Views.vb" 單擊「確定」。關閉「項目屬性」頁。生成解決方案。這將生成視圖文件 School.Views.cs。在「解決方案資源管理器」中右鍵單擊項目名稱,並選擇「添加現有項」。在「添加現有項」對話框中,導航至項目的根文件夾並選擇 School.Views.vb 文件。單擊「添加」。生成解決方案。向C# 項目添加視圖生成在「解決方案資源管理器」中,選擇要為其指定生成事件的項目。在「項目」菜單上,單擊「屬性」。選擇「生成事件」選項卡。在「預生成事件命令行」窗口中,添加下面的預生成事件(無換行符): "%windir%\Microsoft.NET\Framework\v3.5\EdmGen.exe" /nologo /language:CSharp /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" "/outviews:$(ProjectDir)School.Views.cs" 生成解決方案。這將生成視圖文件 School.Views.cs。在「解決方案資源管理器」中右鍵單擊項目名稱,並選擇「添加現有項」。出現「添加現有項」對話框。導航至項目的根文件夾並選擇 School.Views.cs 文件。單擊「添加」。生成解決方案。將映射和模型文件重新添加為 ASP.NET 項目的嵌入資源在「項目」菜單上單擊「添加現有項」。瀏覽至項目的輸出目錄,選擇 School.csdl,然後單擊「確定」。在「解決方案資源管理器」中選擇添加的文件。在「屬性」中,將「生成操作」設置為「嵌入的資源」。對School.ssdl 文件和 School.msl 文件重復步驟 1 至 3。在「解決方案資源管理器」中,雙擊 App.config 文件,然後基於以下任一格式修改 connectionString 屬性中的 Metadata 參數:Metadata=res:///;Metadata=res://*/;Metadata=res://*;resourceName 可以包括項目命名空間。有關更多信息,請參見連接字元串(實體框架)。
7. 求c語言高手解答,解決問題後有高分,學生選課管理系統
在「解決方案資源管理器中」滑鼠右鍵單擊工程,然後選擇「屬性」-》「生成事件」-》「生成後事件」,
你修改裡面的「命令行」即可