我想知道是否有簡單的方法來確保:編譯C#項目時,啓動的Csc.exe
繼承父處理器關聯設置;或者我可以提供這種方式。CoreCompile啓動CSC.exe設置處理器親和力MSBuild任務
我一直在試圖通過啓動從VS.NET一個bat
文件來實現這一點的命令提示符:
start /affinity 01 custombuild.cmd
裏面我custombuild.cmd
我:
@echo off
msbuild Libraries.sln /t:rebuild /p:Configuration=Release;platform=x64 /m:1
:END
命令行調用Csc.exe
那生成如下所示:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe ...
(爲簡潔起見,省略其餘部分)
我想Csc.exe
繼承處理器的親和性,或一個簡單的方法,以便能夠覆蓋如何產生Csc.exe
呼叫,使得其變爲:
start /affinity 01 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe ...
(爲簡潔起見省略其餘部分。)
我還注意到,CoreCompile目標是在Microsoft.CSharp.targets中定義的,我應該考慮重寫MSBuildToolsPath變量,以便我可以在我自己的版本中潛行。這感覺相當黑客。任何幫助將非常感激。
狀態更新: 我曾指出,由CSC任務發起的csc.exe進程在任務類的成員的ExecuteTool方法實際上是準備和我創建了一個自定義任務CpuAffineCscTask從CSC和覆蓋派生ExecuteTool方法。我的目標是通過對暫掛狀態下的CreateProcess進行pinvoke調用來啓動csc.exe,然後設置關聯,然後恢復該線程。我也使用反射來使各種變量的狀態正確設置等。現在我試圖覆蓋CoreCompile目標在MicrosoftCSharp.targets文件中定義的目標,但是當我的目標運行時,我得到以下運行時錯誤。 有沒有這方面的任何已知的例子?即使整個cmd在msbuild診斷輸出中正確輸出。診斷輸出如下,供您考慮。
任務 「MSBuild.Tasks.CpuAffineCscTask」(TASKID:14) C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ CSC.EXE/noconfig /不安全+/nowarn:1701,1702包括/ nostdlib +/errorreport:prompt/warn:4 /doc:..\Bin\Release\Ugp.Igt.Core.XML/definition:TRACE/ reference:「C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll「/ reference:」C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Core.dll「/ reference:」C:\ Program Files (x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ WindowsBase.dll「/ debug:pdbonly/filealign:512 /keyfile:...StrongNameKeyFile.snk/optimize + /out:obj\Release\Ugp.Igt .Core.dll/target:library .. \ DevelopmentKitVersionInfo.cs AnonymousDisposable.cs ByteArrayExtensionMethods.cs TypeMustImplementMe thodAttribute.cs WeakEvent.cs「C:\ Users \ bhatiah \ AppData \ Local \ Temp.NETFramework,Version = v4.0.AssemblyAttributes.cs」(TaskId:14) E:\ source \ Core \ Microsoft.CSharp。目標(217,3):錯誤MSB6001:「Csc.exe」的命令行開關無效。值不能爲空。 E:\ source \ Core \ Microsoft.CSharp.targets(217,3):錯誤MSB6001:參數名稱:SafeHandle不能爲空。 完成執行任務「Igt.MSBuild.Tasks.CpuAffineCscTask」 - 失敗。 (TaskId:14) 在項目「Igt.Core。」中完成構建目標「CoreCompile」csproj「 - 失敗:(TargetId:37) 從項目」c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets「中的目標」_CheckForCompileOutputs:(TargetId:38) E:\源\核心\ Igt.Core \ Igt.Core.csproj」(目標 「_CleanGetCurrentAndPriorFileWrites」 依賴於它):
任何幫助將是非常讚賞
PS:我重定向所有三個IO流,因爲我使用CreateProcess和管道,但創建後我使用Process.getProcessById .net方法獲得對過程對象的引用並附加處理程序。
耐寒