C# 基于解的条件参考路径

C# 基于解的条件参考路径,c#,visual-studio-2010,msbuild,C#,Visual Studio 2010,Msbuild,我有一套这样组织的解决方案 Master Solution - Proj A - Proj B - Proj X - Proj Y SolutionAB - Proj A - Proj B SolutionXY - Proj X - Proj Y 依赖关系 Proj A & B => Proj X & Y 我需要的是让MasterSolution查看本地项目参考,SolutionAB查看相同DLL的

我有一套这样组织的解决方案

Master Solution
   - Proj A          
   - Proj B
   - Proj X
   - Proj Y

SolutionAB
   - Proj A
   - Proj B

SolutionXY
   - Proj X
   - Proj Y
依赖关系

Proj A & B => Proj X & Y

我需要的是让MasterSolution查看本地项目参考,SolutionAB查看相同DLL的完全任意位置。我可以对
.proj
文件进行任何需要的更改,但移动项目的能力有限。这些只是我必须处理的限制。

库引用存储在项目文件中。因为项目是在解决方案之间共享的,所以我认为没有简单的方法可以做到这一点


项目不能始终在任意位置查找文件的任何原因?

您可以使用导入的属性文件执行此操作。由于引用位于项目文件中,因此可以将其或其使用的属性移动到单独的.props文件中

在单独的.props文件中

<PropertyGroup>
  <SomeAssemblyFolder
    Condition="'$(SolutionName)' == 'Master'">PathTo/Master</SomeAssemblyFolder>
  <SomeAssemblyFolder
    Condition="'$(SolutionName)' == 'AB'">PathTo/AB</SomeAssemblyFolder>
</PropertyGroup>

路径/主路径
路径/AB
在项目文件中

<Reference Include="SomeAssembly">
  <HintPath>$(SomeAssemblyFolder)\SomeAssembly.dll</HintPath>
</Reference>

$(SomeAssemblyFolder)\SomeAssembly.dll

如果需要,我想您可以在每个项目文件中复制属性定义,但我会将其移动到导入。如果您需要从命令行或其他解决方案文件进行构建,请记住提供合理的默认值,或在命令行上提供有区别的属性。

是的,当您确实只想处理项目时,很难处理任意DLL,同时,其他人依赖共享DLL,因此,您必须在文件系统中将它们保持为只读状态。在我工作的地方,他们就是这样做的。你能提供更多关于如何在C#projects中创建一个单独的.props文件和导入.props文件的信息吗,或者至少提供一些相关链接。我在回答中使用了你的示例,尝试了一个单独的props文件,出于某种原因,即使导入工作正常且不会抛出错误,csproj也不会拾取props文件中的路径,如果我将带有共享位置的属性组放入csproj文件中,它就会工作,我不明白为什么没有从导入的道具文件中提取该值。这确实有效。我将路径指向了错误的导入文件。