.net core DefineConstants可以使用Run命令,但不能使用Build命令
我正在努力理解.net core DefineConstants可以使用Run命令,但不能使用Build命令,.net-core,.net Core,我正在努力理解dotnet run和dotnet build命令之间在.csproj文件中定义的常量方面的区别 example.csproj Exe netcoreapp3.1 美元(定义常量);包括测试 program.cs 使用系统; 名称空间定义示例 { 班级计划 { 静态void Main(字符串[]参数) { #如果包括测试 Console.WriteLine(“成功了!”); #恩迪夫 控制台。WriteLine(“你好,世界!”); } } } 如果我运行dotnet run
dotnet run
和dotnet build
命令之间在.csproj
文件中定义的常量方面的区别
example.csproj
Exe
netcoreapp3.1
美元(定义常量);包括测试
program.cs
使用系统;
名称空间定义示例
{
班级计划
{
静态void Main(字符串[]参数)
{
#如果包括测试
Console.WriteLine(“成功了!”);
#恩迪夫
控制台。WriteLine(“你好,世界!”);
}
}
}
如果我运行dotnet run-c测试,->它工作了!你好,世界代码>
如果我运行dotnet build-c测试
,那么dotnet运行{buildpath}
->Hello World代码>
为什么在我运行build命令时定义的常量会丢失?dotnet build
和dotnet run
都是与csproj文件相关的命令,而不是dll或可执行文件。
dotnet build
将调用dotnet restore
命令,然后生成项目。
dotnet run
将调用dotnet build
命令(这对于您的问题很重要),然后运行生成的dll或exe
您当前通过调用dotnet build-c Test
和dotnet run
告诉dotnet执行的操作是:
清理、恢复、构建(使用“测试”配置)
清理、还原、生成、运行(未指定配置)
第二次清理将清理第一次生成生成的文件,然后作为run命令的一部分再次生成,但没有指定测试配置,从而导致观察到的行为
您可以将dotnet-run
更改为dotnet-run--no-build
,告诉它假设构建已经完成,并且只假设已经创建的文件存在且正确
或者,假设您的项目有一个OutputType
的Exe
,您可以在第二步中以常规方式调用build命令生成的可执行文件。i、 e.使用命令example.exe
如果未指定您的输出类型
,或默认(库
),则这将生成一个dll而不是exe,您可以使用dotnet
命令运行它:dotnet example.dll
有关各种命令和常用属性的有用信息:
我不是.net开发人员,但看起来这个常量应该可以用于调试构建,这就是为什么在生产构建中看不到它的原因。这些常量通常用于记录调试信息并在构建中包含测试。只想添加一件事:如果您自己正在执行dotnet bulid
和/或dotnet publish
,您可以直接运行dll以避免dotnet run
:dotnet bin/../example.dll
。请注意,这只是dotnet example.dll
,而不是dotnet run example.dll
(省略run
)。