我已经和它搏斗了几天,经过大量的搜索,我找不到我应该走的路.
我想要做的是建立一个MSBUILD项目,它将构建我们的整个.NET应用程序(8个解决方案的常量,可能有250个项目在它们之间拆分),并从单个项目文件中覆盖了许多设置以进行调试构建为了我自己.
具体来说,我想构建我们的发布配置,优化关闭并生成完整的调试信息/ pdbs.另外,为了减少我们当前超长的构建时间,我希望每个项目的每个引用都"复制本地"(或实际的proj文件xml中的私有)为false.
第一件事情相当简单,我可以相当轻松地覆盖项目级属性(你甚至可以使用/ p从MSBuild命令行执行此操作),但我无法弄清楚如何覆盖引用上的属性.我已经尝试过在StackOverflow和网络上看到的几件事,但还没有解决方案.
我可以通过改变Microsoft.Common.targets做我想做的事情,注释掉_CopyFilesMarkedCopyLocal目标中的代码完全跳过这些文件的复制.但我不想改变我的全局配置并在所有情况下都这样做.我创建了自己的备用目标文件 - 如果我将单个项目文件更改为指向它,则可以正常工作 - 但我无法弄清楚如何指定它在顶层使用(我的.proj文件只是构建所有8种解决方案).如果我能以某种方式覆盖顶层的_CopyFilesMarkedCopyLocal目标,那将是很好的,这样如果MS更改默认目标文件,我的构建不会搞砸,但我也无法弄清楚如何使这项工作.
最好的办法是,如果有一种方法可以覆盖引用级属性,就像你可以项目级属性一样,而不必重写/覆盖构建目标的东西 - 但是我没有发现任何可能的信息.
在此先感谢任何帮助.
PS我实际上不可能只浏览所有项目文件并进行更改; 我需要一个解决方案,将现有代码保留原样.
我收到一个错误,我的项目找不到参考。Copy Local最初设置为True,但是在重新构建解决方案后,其更改为False:

为什么会这样?我如何使它粘住?我尝试编辑项目本身:

但是,参考资料显示,Copy Local重建后仍然是错误的。
免责声明:这是.Net Framework特有的问题,在 .Net Core 中不会发生。
我目前正在开发一个项目,该项目作为一个更大项目的插件。我想将项目的输出路径设置到较大项目的 AddIn 文件夹,然后使用项目的调试属性启动较大的项目,这样我就不必每次都手动复制并附加到项目。
我拥有的任何参考都是与较大的项目共享并从其管理的,这意味着我没有(也不应该)将它们复制到 AddIn 文件夹。
我将此答案中的代码包含到我的 .csproj (VS 19/新格式)
<ItemDefinitionGroup>
<Reference>
<Private>False</Private>
</Reference>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
</ItemDefinitionGroup>
Run Code Online (Sandbox Code Playgroud)
排除项目和常规引用,但在 .Net Framework 中,我的 Nuget 包中的所有.dll也会复制到输出路径。我也在寻找一种方法来禁用它,但还没有找到。
有没有办法阻止Nuget 包中的.dll被复制到 .Net Framework 中的输出路径?
这是我第一次尝试启动的旧项目。我收到此错误:
Could not load file or assembly 'Microsoft.Web.Infrastructure,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of
its dependencies. The system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)
VS2017 上的 MVC4 (dotnet 4.5) 应用程序。
我遇到了这个 S/O 帖子,但我无法完全尝试接受的答案,因为当我尝试保存更改时,它会Copy Local继续更改回False原状。此外,另一个 S/O 帖子似乎表明我不应该篡改Copy Local属性,以便阻止我设置Copy Local为的行为True似乎是故意的(或者可能表明“在全局程序集缓存中找到了程序集”。
为什么我不能设置Copy Local字段?关于如何尝试在 VS2017 中更新Copy Localto 的任何想法True?