[英]How to specify .net target framework when building c# dll in Visual Studio Command Prompt 2010?
[英]Visual Studio C#/csc writes .dll output file more than once when building
我正在制作一個應用程序,每當寫入文件時都會重新加載 a.dll。 這樣,當我構建時,我會自動加載更改。
我正在像這樣使用 FileSystemWatcher(簡化):
const string DllDir = @"C:\blah\bin\Debug\net6.0";
const string DllFile = "dependency.dll";
static void Main(string[] args)
{
var stopwatch = Stopwatch.StartNew();
using var watcher = new FileSystemWatcher(DllDir, DllFile);
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Changed += (a, b) =>
{
stopwatch.Stop();
Console.WriteLine("Changed " + stopwatch.Elapsed);
stopwatch.Restart();
};
watcher.EnableRaisingEvents = true;
while (true) ;
}
但每當我構建dependency.dll
項目時,從 IDE 解決方案資源管理器中右鍵單擊或直接調用 csc ( csc /target:library C:\blah\Example.cs /out:C:\blah\bin\Debug.net6.0\dependency.dll
),我從觀察程序中得到了這樣的 output :
Changed 00:00:14.6056924
Changed 00:00:00.0000761
首先是我啟動觀察程序后的 14 秒延遲,直到 dll 發生變化,然后 76 微秒后它再次發生變化。 我正在使用 Visual Studio 2022。
我已經搜索過,但仍然完全不知道發生了什么。
誰能向我解釋發生了什么事? 是否有命令行參數或一些項目配置來避免這種情況? 我正在嘗試盡可能快地構建,所以我想了解執行此操作以禁用它的不必要步驟。 否則我想我可以在構建后步驟中將 dll 復制到另一條路徑,但無論如何我都想了解編譯器在做什么。
謝謝
顯然,這與監視文件而不是構建過程有關。 將副本添加到構建后步驟會在目標路徑上顯示相同的行為。
NotifyFilters 文檔說:
LastWrite:文件或文件夾最后寫入任何內容的日期。
但是 OnChanged 文檔進一步擴展了這一點:
當對文件或目錄的大小、系統屬性、上次寫入時間、上次訪問時間或安全權限進行更改時調用 OnChanged
所以可能對單個構建或副本進行了多項更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.