2015-07-02 26 views
0

我期待设置一个环境/配置,使我可以为多个平台/目标(如构建配置和/或.NET框架)构建和部署定制库版本。为此,我制定了以下结构:构建,打包并部署多个平台目标

MyProject.sln 
src\ 
    File1.cs 
    File2.Net30.cs 
    MyProject.Net40.csproj 
    MyProject.Net30.csproj 
    MyProject.Net45.csproj 

所有项目文件都包含在解决方案中并一次构建。每个项目都包含其目标框架的源文件和/或有条件地编译不同.NET版本的所有文件(使用编译器指令,例如NET35,NET34_OR_GREATER)。此外,每个项目文件包含以下内容的MSBuild指令:

<OutputPath>bin\$(Configuration)\$(Platform)\$(TargetFrameworkVersion)\$(TargetFrameworkIdentifier)\</OutputPath> 
<BaseIntermediateOutputPath>obj\$(Configuration)\$(Platform)\$(TargetFrameworkVersion)\$(TargetFrameworkIdentifier)\</BaseIntermediateOutputPath> 
<DocumentationFile>bin\$(Configuration)\$(Platform)\$(TargetFrameworkVersion)\$(TargetFrameworkIdentifier)\$(AssemblyName).xml</DocumentationFile> 

这使我由输出路由到不同的目录同时构建所有。

现在,这就是建设。但是,我真的坚持部署,尤其是与NuGet相关。我创建了一个.nuspec,其中我手动添加了每个依赖关系:

<file src="bin\Release\AnyCPU\v4.0\MyProject.dll" target="lib\net40-client\EIT.Foundation.dll" /> 
<file src="bin\Release\AnyCPU\v4.0\MyProject.xml" target="lib\net40-client\EIT.Foundation.xml" /> 
<file src="bin\Release\AnyCPU\v4.5\MyProject.dll" target="lib\net45\MyProject.dll" /> 

这很好,但是非常繁琐。所以第一个问题:有没有办法自动挂接文件?

而我的第二个问题:有时候我的库本身也有NuGet依赖关系。对于项目依赖关系,在下载NuGet依赖关系时,packages.config将自动创建在与项目相同的文件夹中。 packages.config不仅包含在项目中使用的依赖项或其版本,还需要依赖项的哪个框架版本。这是一个问题,因为每个项目文件(对于每个框架目标)驻留在同一个文件夹中,所以他们需要以某种方式共享相同的packages.config文件。我已经尝试过的项目文件搬迁到一个不同的结构是这样的:

MyProject.sln 
target\ 
    net40\MyProject.Net40.csproj 
src\ 
    File1.cs 

...但是然后我无法保存在我的源文件夹中的文件夹结构(如果有任何),因为项目文件只允许我包含文件,而不是文件夹(它们被自动包含在内)。有没有办法解决这个问题呢,还是NuGet不适合多目标构建?

回答

4

虽然NuGet支持为特定项目创建一个NuGet包,但它只针对单个项目。该命令是NuGet pack YourProject.csproj,所以我怀疑它不会帮助你。使用.nuspec文件可能是实现这一目标的唯一方法。

如果您重命名packages.config文件,NuGet支持同一目录中的多个项目。每个packages.config文件应该在项目之后命名。所以,在你的榜样下面应该工作:

  • packages.MyProject.Net40.config
  • packages.MyProject.Net30.config
  • packages.MyProject.Net45.config
+0

正是我正在寻找。我认为重命名packages.config将使NuGet无法找到依赖关系,但它似乎工作。 :) – artganify

+3

它不是广为人知的NuGet功能。 [NuGet 2.8发行说明](https://docs.nuget.org/release-notes/nuget-2。)上有一段。8#user-content-individual-packagesconfig-files-for-different-platforms)但这是我除了阅读源代码以外唯一看到的文档:) –

+0

Upvote for gods work and actually study nuget source to out out如何做东西。 (并非每个人都有时间)。 :) – artganify