TL; DR是否有任何官方文档详细描述<private>/"复制本地"选项如何与MSBuild一起使用?应该考虑什么价值?
当你添加一个项目引用从一个项目在Visual Studio中的另一个,它会加入<ProjectReference Include=".....csproj">到.csproj的MSBuild文件.
当您将 Visual Studio中的一个项目的文件引用添加到文件系统中的程序集文件时,它将添加<Reference Include="Foo"> <HintPath>....Foo.dll</HintPath> ...到.csprojMSBuild文件.
在这两种情况下,Visual Studio的设置Copy Local = True|False,一个子元素<Private>True</Private>或<Private>False</Private>将增加.
Reference并且ProjectReference似乎在Common MSBuild Project Items下记录:
Run Code Online (Sandbox Code Playgroud)<ProjectReference> Represents a reference to another project. Item Name Description ------------------------- Name ... Project ... Package ... <Reference> Represents an assembly (managed) reference in …
.net msbuild copy-local visual-studio msbuild-projectreference
我有一个"Project A",它引用System.Web.Mvc和CopyLocal = TRue.System.Web.Mvc在我的本地机器和构建服务器上都在GAC中.
我还有一个"项目B",在"项目B"System.Web.Mvc的输出中引用"项目A",在构建期间不会复制到该项目.
我怀疑这是因为它在GAC中.这是真的?我可以做些什么来让MSBuild将它复制到输出文件夹吗?
我在这个帖子中读到了Muse VsExtensions的答案,它只讨论了对GAC的直接引用,但我们通过"项目A"间接引用: .NET参考"复制本地"真/假根据内容设置GAC
这篇博文也是相关的:http: //deeperdesign.wordpress.com/2010/02/08/msbuild-assembly-dependencies-and-the-gac/
我正在创建一个多平台应用程序.我有一个多目标共享库(目标.netstandard 2.0和.net 4.5)...请参阅项目文件:
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
当我在Windows上的visual studio 2017中构建项目时,我在输出中有两个目录(netstandard2.0,net45)和相应的dll.构建是成功的.
当我在Mac上的visual studio 2017中构建完全相同的项目(相同的代码)时,我得到了这种性质的错误:
类型'OptionAttribute'存在于'CommandLine.DotNetStandard,Version = 1.0.30'和'CommandLine,Version = 1.9.71.2'中
我通过以下方式有条件地引用了命令行解析器库:
<!-- CommandLineParser library -->
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="CommandLine.DotNetStandard">
<Version>1.0.3</Version>
</PackageReference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net45'">
<PackageReference Include="CommandLineParser">
<Version>1.9.71</Version>
</PackageReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这适用于Windows,但在Mac上它似乎没有观察到这种情况.这是mac上visual studio的已知错误吗?难道我做错了什么?
msbuild multitargeting nuget-package msbuild-projectreference visual-studio-mac
是否可以在MSBuild中设置ProjectReference的配置?
场景:我有一个构建脚本(Web部署),它具有许多配置,其中唯一的区别与它们的部署方式有关,而不是自己构建.我不愿意为我的解决方案/项目维护配置,这些配置是作为部署过程的一部分构建的,因为我需要这些配置进行部署.我能以任何方式完成这项任务吗
在WiX项目(*.wixproj)中引用项目时,我经常看到代码片段
<ItemGroup>
<ProjectReference Include="..\Foo.Bar\Foo.Bar.csproj">
<Name>Foo.Bar</Name>
<Project>{0bd367ce-5072-4161-8447-ff4deed97bd4}</Project>
<Private>True</Private>
<DoNotHarvest>True</DoNotHarvest>
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
<RefTargetDir>INSTALLLOCATION</RefTargetDir>
</ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释什么属性DoNotHarvest,RefProjectOutputGroups以及RefTargetDir是什么意思?或者指向一些文档?我找不到任何解释这些属性含义的内容(包括WiX文档).
我在尝试使用 MSBuild 构建时遇到一个奇怪的问题。
我正在使用 MSBuild 构建一个解决方案文件/m(并行构建)并BuildProjectReferences设置为true.
假设我在 .sln 文件中拥有A.vcxproj和 ,B.vcxproj其中 B 具有对 A 的项目引用。
发生的情况是:A project首先开始构建,在编译过程中,B project开始在另一个进程中构建(因为并行构建),并且它将调用构建 A。
现在这会导致竞争条件,因为我们有两个进程试图构建相同的进程project A,并且我会看到访问问题。
理想情况下,如果 A 尚未完成构建,MSBuild 不应调用构建 B,或者如果它调用了 B,则检测到 A 仍在构建并等待其完成。
这一切都没有发生。另外,这种情况仅在 MSBuild 中发生 - 如果我尝试从 VS2015 IDE 构建解决方案文件,则不会发生这种情况。
知道为什么 MSBuild 会这样吗?
msbuild project-reference race-condition parallel-builds msbuild-projectreference