![](/img/trans.png)
[英]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.