以下是最初定义条件编译常量的方式(注意多目标):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netcoreapp2.0;net461</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.0' OR '$(TargetFramework)' == 'netstandard2.0'">
<DefineConstants>NETCORE;</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net461'">
<DefineConstants>NETFULL;</DefineConstants>
</PropertyGroup>
...
</Project>
Run Code Online (Sandbox Code Playgroud)
当时NETCORE
常量工作正常。
#if NETCORE
// Works Fine! Not gray in VS; Compiler recognizes code!
public string Abc { get; set; }
#endif
Run Code Online (Sandbox Code Playgroud)
我正在处理我的代码,但当时我的程序集没有编译。
之后,我添加了额外的条件编译常量(不编辑以前的 -NETFULL
和NETCORE
):
<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.0'">
<DefineConstants>NETCOREONLY;</DefineConstants>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
整体代码(程序集)仍未编译。
并删除了NETCOREONLY
不需要的附加项,只留下以前的(NETCORE
和NETFULL
)。
整体代码(程序集)仍未编译。
问题是它NETCORE
不再像以前那样工作了。
我正在切换到netcoreapp2.0
平台,但代码
#if NETCORE …
Run Code Online (Sandbox Code Playgroud) conditional-compilation csproj multitargeting visual-studio .net-core
到目前为止,我一直使用属性来控制PackageReference
(第一个示例)的资产依赖性。最近,在使用 NuGet 包管理器(在 VS 中)之后,我最终得到了完全不同的 XML。
两者都控制相同的东西,任何人都可以帮助我理解差异和需要有两种方法来控制类似的东西吗?
.NET Core 的 csproj 格式的新增内容 > PackageReference
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" PrivateAssets="..." IncludeAssets="..." ExcludeAssets="..." />
Run Code Online (Sandbox Code Playgroud)
项目文件中的包引用 (PackageReference) > 控制依赖项资产:
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
<IncludeAssets>...</IncludeAssets>
<ExcludeAssets>...</ExcludeAssets>
<PrivateAssets>...</PrivateAssets>
</PackageReference>
Run Code Online (Sandbox Code Playgroud) 在开始之前,我必须声明我对这个 nuget 包还很陌生,所以先来了解一下我的基础知识。
我的应用程序有一个核心项目来携带一些 .dll 和 .sql 文件以及一个 api 项目。我已经将核心项目制作为带有dotnet pack 的nuget 包,并在 github 操作上将其自动化,因此它在所有prs上创建了一个新版本并将其推送到我的私人 nuget 服务器,直到这里一切都很好。
当我将这个核心包安装到我的api项目中时,也没有问题。它安装成功,我的 sql 文件按照我的预期显示在目标项目上(但作为链接源)。
但是当我尝试使用 dotnet pack 发布此项目时,.sql 文件不会复制到输出文件夹。我查看了文件的属性,发现它们的复制到输出目录属性已重置为不复制,并且文件路径是绝对的。
我的目标是使用 github 操作构建和部署此 api,因此绝对路径是不可接受的,此外我不想在目标项目中手动安排某些内容。
我正在用 dotnet pack 打包核心项目,但我没有
或其他类似的东西,我不知道如何使用它们。
我尝试添加到 csproj 文件<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
和<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
其他内容,但它们不起作用。
谁能帮我?
使用 MS 提供的升级助手,我尝试将我的项目从 .NET 6 升级到 8。
我注意到它被插入到我的项目文件的顶部:<ImplicitUsings>enabled</ImplicitUsings>
是否<ImplicitUsings>
为我的项目提供任何可能的攻击媒介?我有一种感觉,图书馆可以通过这种方式被劫持。
有人有任何信息吗?谢谢!